比較兩數大小

2021-08-30 09:35:16 字數 594 閱讀 3068

請定義乙個巨集,比較兩個數a、b的大小,不能使用大於、小於、if語句..

解一:

#define   max(a,b)   ((((long)((a)-(b)))&0x80000000)?b:a)

a > b ,

則a-b

的二進位制最高位為

0,與上任何數還是

0,所以大數為a;

否則,a-b

為負數,二進位制最高位為

1,與上

0x80000000

(最高位為

1其他為

0)之後為

1,所以此時的大數為b.

解二:

#define cmp(a,b) ((long)((a) - (b)))>>31 //兩數作差,結果右移31位,即,將結果的首位(符號位)作為返回值
解三:

#define max(a,b) (fabs((a)-(b))==((a)-(b))?(a):(b))
fabs()所接受的引數及返回值都是double型的,這樣無論它是接受整數還是接受float型的資料,都不會因精度問題而出現誤差!

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

比較兩個時間大小

datetime.compare t1,t2 比較兩個日期大小,排前面的小,排在後面的大,比如 2011 2 1就小於2012 3 2 返回值小於零 t1 小於 t2。返回值等於零 t1 等於 t2。返回值大於零 t1 大於 t2。如 c sharp view plain copy using sy...