利用異或進行數字交換 -- 無需中間變量 (位操作的應用實例)

利用亦或進行位操作,不借助中間變量的情況下,實現兩個數字的交換。

異或:相同爲假,不同爲真。
故任何一個數字和自身亦或均爲0,和0亦或不變。
即X ^ X = 0, X ^ 0 = X。

對兩個數字進行交換
int x = N, y = M;
x = x ^ y;
y = x ^ y;
x = x ^ y;

推理,將上一步的值代入下一步即可
第一步:x = x ^ y;
第二步:y = x ^ y = (x ^ y) ^ y = x ^ y ^ y = x ^ (y ^ y) = x ^ 0 = x;
第三步:x = x ^ y = (x ^ y) ^ x = x ^ y ^ x = (x ^ x) ^ y = y;


摘錄於黃申的《程序員的數學基礎課》,感覺比較有意思,記錄下


其他的思路
int x = N, y = M;
x = x + y;
y = x - y;
x = x - y;
需要考慮溢出

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章