1. 用 if 判斷式與大於、小於,這應該是最直接也是最容易想到的方法
2. 用三元運算子,其實也是一樣意思,只是看起來比較簡潔
(a<b)?a:b
3. bitwise 運算,這是本篇文章主要要討論的
首先我們要先知道,在 bitwise 運算下,兩數值可不必透過第三個數值做交換的動作,詳細請看以前的文章:[C/C++][不透過第三個變數做兩數值交換],既然可透過 bitwise 運算交換兩數值,那接下來就要做判斷了
#include <iostream> using namespace std; int main () { int a = 1; int b = 2; cout << (b^((a^b) & (-(a<b)))) << endl; // min(a, b) return 0; }
在上述程式碼中,有個特別的地方,就是 -(a<b),比方說當 a=1, b=2 時,-(a<b) 就會是 -1,轉換成二進制來看的話就是全部都是 1,跟 (a^b) 做 AND operation 後還是 (a^b),套用上述的"不透過第三個變數做兩數值交換"的結果可知,(b^((a^b) & (-(a<b)))) = (b^(a^b)) = a;那如果 a=2, b=1 時,-(a<b) 就會是 0,跟 (a^b) 做 AND operation 後還是 0,(b^((a^b) & (-(a<b)))) = (b^0) = b,即是找出較小的值
那如果要找最大值呢?很簡單,只要改最前面的 b 就好了,如下
#include <iostream> using namespace std; int main () { int a = 1; int b = 2; cout << (a^((a^b) & (-(a<b)))) << endl; // max(a, b) return 0; }
沒有留言:
張貼留言