不用if語句判斷出兩個數的大小 值得借鑑

2021-06-26 09:00:00 字數 918 閱讀 9890

#include "stdafx.h"

#include using namespace std;

/* 方法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

*/ int fmax2(int a, int b)

/* 方法3:如果取 a/b 餘數不為0,則說明a>b

這是個好方法,不過題目說了,不能用「? :」

*/ int fmax3(int a, int b)

/* 方法4:移位法

當b<0的時候以補碼存,故最高位是1

所以右移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)

//我想這個應該是最牛b的乙個

int fmax7(int a, int b)

; return pair[a < b];

} int main(int argc, char* argv)

不用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 ...

不用if比較兩個數大小

大的為 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 這是個好方法,不過題目說了...

不用 實現兩個數相加

方法一 用邏輯運算 a b 表示a b 中每位不進製的和,a b 1 二進位制加法 1 1 1,把1左移以為10,1 1 10,表示a b 所有進製 思想是兩個數字相加中能分解成 不進製的和 每一位相加的進製 a b a b a b 1 如果a b 0的時候 a b a b 負整數運算也可以,因為補...