C語言位操作 兩整數中的最大值與最小值

2021-09-06 10:52:37 字數 845 閱讀 9754

不用選擇分支找出指定兩整數中的最大值與最小值:

int x; 

int y; // 找出x與y的最大值與最小值

int r; // r儲存結果

r = y ^ ((x ^ y) & -(x < y)); // min(x, y)

在一些很少的機器上,分支比較很耗資源,而且沒有條件移動指令存在,以上的實現可能比傳統的方法: r = (x < y) ? x : y 要快。

即使比後者多執行兩步指令。(通常,前面的方法要快)

它的工作原理如下:

如果x否則,如果x >= y, 那麼 -(x < y) 全部為0,結果 r = y ^ ((x ^ y) & 0) = y.

在某些機器上,計算(x

若果要找到最大值,可以使用如下方法:

r = x ^ ((x ^ y) & -(x < y)); // max(x, y)
快速的方法:

如果大家知道int_min <= x - y <= int_max,可以使用下面快速的方法,因為(x-y)只用計算一次

r = y + ((x - y) & ((x - y) >> (sizeof(int) * char_bit - 1))); // min(x, y)

r = x - ((x - y) & ((x - y) >> (sizeof(int) * char_bit - 1))); // max(x, y)

注意到1989 ansi c說明書沒有指定有符號右移,所以上上述方法不穩定,如果丟擲溢位異常,於是在做減法操作的時候,x與y的值應該指定為無符號或是轉換為無符號型別,以避免沒有必要的異常丟擲。

求給定整數中的最大值

首先我們先用整形陣列將給定的值存起來,下邊我將給出5個整數來實現程式.include include int max int a,int sz return max int main int sz sizeof a sizeof a 0 int ret max a,sz printf max d n...

C語言 求10 個整數中最大值

求10個整數中的最大值。先建立乙個能夠儲存10個資料的陣列,輸入資料,將第乙個值賦給變數max,然後依次將陣列中的每乙個數與max比較,當max小於對應的數時,則將對應的數賦給max,10個值全部執行完畢之後,max中便是這是個值中最大的值,輸出max即可。define crt secure no ...

C語言 求a b c三個整數中的最大值

剛開始學習c語言的時候,我們可能會用if 語句進行求解,具體如下 include int main 但是我們可以想一想,是否可以進行優化呢?於是,就有了下面的一段 include int main 我們可以看到,將a b的比較利用條件運算子的表示式進行了優化,那是否還可以進一步優化呢?就像a b比較...