使用異或實現兩數交換

2021-09-23 08:11:07 字數 814 閱讀 3036

如果a、b兩個值不相同,則異或結果為1。如果a、b兩個值相同,異或結果為0。

異或也叫半加運算,其運算法則相當於不帶進製的二進位制加法:二進位制下用1表示真,0表示假,則異或的運算法則為:0 ^ 0 = 0,1 ^ 0 = 1,0 ^ 1 = 1,1 ^ 1 = 0(同為0,異為1)。這些法則與加法是相同的,只是不帶進製,所以異或常被認作不進製加法。

歸零律:p ^ p = 0

恒等律:p ^ 0 = p

交換律:p ^ q = q ^ p

結合律:p ^ q ^ r =( p ^ q ) ^ r = p ^ ( q ^ r )

自反:由性質1,2,3可推出,p ^ q ^ q = p

由 p = q ^ r 可以推出 q = p ^ r

若需要交換兩個變數的值,除了借用中間變數進行交換外,還可以使用異或而不借助中間變數。

a = a ^ b

b = a ^ b

a = a ^ b

過程如下:

能夠這樣交換,其實是異或性質4的運用。

但是在實際中不建議這麼使用。雖然異或方法看起來很巧妙,但是有乙個嚴重的缺點。當a,b引用的是同乙個變數時,這種方法會使變數清零。因此在運算前還要比較一下兩者引用物件是否相同。但是這樣做,並不見得速度比使用中間變數來得快,而且也並不簡單明瞭。

異或運算實現兩數交換

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

異或運算進行兩數交換

直接上 swap int a,int b 解析 此方法簡潔明瞭。先來講一下異或運算的性質 異或運算可看做不進製的加法!1 任何數異或自身等於0。因為自身就是兩個相同的數相加,每一位都一樣,要麼0要麼1,1 1和0 0按照不進製加法就是0 2 任何數異或0都等於自身。這個很好理解,任何數加0都等於本身...

異或 實現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 ...