使用異或交換資料值的原理

2021-07-03 02:24:28 字數 751 閱讀 7913

**:

大家都知道,假如有a,b兩個整型數,我們可以用

a^=b;

b^=a;

a^=b;

來交換a,b的值,在這裡我說說其中的原理:

^ 在 c 裡面是按位異或操作符,相同的話異或的結果就是 0,不同的話就是 1。舉個例子,比如 a 表示十進位制的 5,b 表示十進位制的 12,按位異或結果就是:

a = 0101   (5 的二進位制表示)

b = 1100   (12 的二進位制表示)

----

c = 1001   (結果為 9)

可以看出 c 中是 1 的部分就是 a 和 b 二進位制表示對應位不同的部分,0 則是相同的部分。

牢記以下兩條原則:

任何一位二進位制數同 1 異或都會變成另外乙個(0 同 1 異或的結果是 1,1 同 1 異或的結果是 0)

任何一位二進位制數同 0 異或都保持不變(0 同 0 異或的結果是 0,1 同 0 異或的結果是 1)

因為 c 中是 1 的部分表示 a 和 b 中按位不同的位,0 表示 a 和 b 中按位相同的位,那麼 a 同 c 異或的結果就是 a 中與 b 不同的位發生變化,二進位制數每位只有兩種狀態,所以 a 變成了 b:

a = 0101

c = 1001

----

b = 1100

同樣, b 與 c 異或結果就變成了 a:

b = 1100

c = 1001

----

a = 0101

異或運算推導, 交換資料

5 0101 9 1010 5 5 0101 0101 0000 得出第乙個規律 相同的數進行異或,結果是0 9 5 6 1010 0101 1111 1111 0110 1001 9 6 5 1010 0110 1100 1100 0101 1001 得到第二個規律 異或的順序是可以交換的 100...

交換的異或實現

如果想交換 a 和 b 的值,我們通常的做法是 宣告乙個臨時變數 temp,然後再實現互換,這種方式常見的讓我幾乎認為 就應該這樣做,但今日拜讀 深入理解計算機系統 一書時,卻發現了另一種巧妙的實現方式,不用第三個位置來臨時儲存,只需位操作 異或 即可。定義 a b a b ab a 為非a 1 1...

使用異或實現兩數交換

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