**:
大家都知道,假如有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 這些法則與加法是相同的,只是不帶進製,所以異或常被...