不用if比較兩個數大小

2021-09-24 16:21:27 字數 764 閱讀 4225

大的為 ((a+b)+abs(a-b)) / 2 

小的為 (a+b - abs(a-b)) / 2 

int fmax1(int a, int b) 

ab時,b/a=0,所以前面為a*(a/b),後面為a/b,那麼結果就是a

int fmax2(int a, int b) 

如果取 a/b 餘數不為0,則說明a>b 這是個好方法,不過題目說了,不能用「? :」 

int fmax3(int a, int b) 

當b<0的時候以補碼存,故最高位是1 。負數補碼符號位是1,正數補碼符號位是0。所以右移31位b>>31其實就是最高位的值 。

b>=0時候最高位為0 ,所以b跟1與時候為b,a=a-(a-b)=b ,b跟1作與運算時候為0,相當於a=a-0=a。

int fmax4(int a, int b) 

int fmax5(int a,int b)

; int z = a - b;

z = (z>>31)&1;

return c[z];

} int fmax6(int a, int b)

int fmax7(int a, int b) 

; return pair[a < b];

}

不用if比較兩個數大小

一 問題 有兩個變數a,b,不用 if switch或者其它判斷語句,找出兩個數中間比較大的 二 解決方案 方法1 取平均值法 大的為 a b abs a b 2 小的為 a b abs a b 2 int fmax1 int a,int b 方法2 不使用abs ab時,b a 0,所以前面為a ...

比較兩個數的大小

一 問題 有兩個變數a,b 找出兩個數中間比較大的 二 解決方案 方法1 取平均值法 大的為 a b abs a b 2 小的為 a b abs a b 2 int fmax1 int a,int b 方法2 不使用abs ab時,b a 0,所以前面為a a b 後面為a b,那麼結果就是a in...

比較兩個數字的大小

int max x x y x y 31 int a int b while a b system.out.println b x y 31不是把x y的符號位取出來了嗎?如果x y則x y 31就是0,否則是1 return a b abs a b 2 int nums return nums a...