不用選擇分支找出指定兩整數中的最大值與最小值:
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比較...