交換的異或實現

2021-08-23 15:50:00 字數 478 閱讀 6282

如果想交換 a 和 b 的值,我們通常的做法是:宣告乙個臨時變數 temp,然後再實現互換,這種方式常見的讓我幾乎認為

就應該這樣做,但今日拜讀《深入理解計算機系統》一書時,卻發現了另一種巧妙的實現方式,不用第三個位置來臨時儲存,

只需位操作(異或)即可。

定義:a^b=a'b+ab'(a'為非a)

1^1 = 0;

0^0 = 0;

1^0 = 1;

0^1 = 1;

規則:a ^ a = 0;

a ^ 0 = a;

a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c;

推論:(a^b)^b = a^(b^b) = a;

// c實現版本

void swap(int *x, int *y)

雖然效能上沒有什麼很大優勢,但這個方法開闊了思路,但卻給我們柳暗花明又一村的感覺,原來還可以這樣!

使用異或實現兩數交換

如果a b兩個值不相同,則異或結果為1。如果a b兩個值相同,異或結果為0。異或也叫半加運算,其運算法則相當於不帶進製的二進位制加法 二進位制下用1表示真,0表示假,則異或的運算法則為 0 0 0,1 0 1,0 1 1,1 1 0 同為0,異為1 這些法則與加法是相同的,只是不帶進製,所以異或常被...

異或運算實現兩數交換

在 演算法競賽入門經典 第2版 p9,介紹了三種交換兩個數的方法。1 三變數法 incldueusing namespace std int main 2 不借助其他變數 incldueusing namespace std int main 3 異或運算 異或 是乙個數 算符。它應用於邏輯運算。異...

異或 實現a和b兩變數交換

今天在看c語言的位運算時,看到了如下交換a,b兩值的方法 a a b b a b a a b 後來想想,真是太神奇了!其實,我們首先知道,對於任意的x滿足 x x 0 x 0 x 那麼上面的式子事實上是利用了如上的規則,首先用a儲存了a b的 值,再用b a b a b b a b b a b b ...