請定義乙個巨集,比較兩個數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...