異或運算實現兩個數的交換

2021-06-27 01:30:07 字數 1849 閱讀 3534

通常的交換兩個變數a,b的過程為

int temp;

temp=a

a=b;

b=temp;

需借助上面的第3個臨時變數temp.

採用下面的方法,對於給定兩個整數a,b,下面的異或運算可以實現a,b的交換,而無需借助第3個臨時變數:

a = a ^ b;

b = a ^ b;

a = a ^ b;

這個交換兩個變數而無需借助第3個臨時變數過程,其實現主要是基於異或運算的如下性質:

1.任意乙個變數x與其自身進行異或運算,結果為0,即x^x=0

2.任意乙個變數x與0進行異或運算,結果不變,即x^0=x

3.異或運算具有可結合性,即a^b^c=(a^b)^c=a^(b^c)

4.異或運算具有可交換性,即a^b=b^a

分析:

第一步:    a = a ^ b;

完成後 a變數的結果為a ^ b

第二步:    b = a ^ b;

此時賦值號右邊的a儲存的是a ^ b的值,那麼將賦值號右邊的a用a ^ b替換,

得到(a ^ b) ^ b=a ^ (b ^ b)=a ^0=a,

即經過第二步運算後b中的值為a,即b=a,將a換到了b裡

第三步:    a = a ^ b;

此時賦值號右邊的a儲存的仍然是a ^ b的值,不變,而賦值號右邊的b已經是a 了,

將賦值號右邊的a,b分別進行替換,

即此時賦值號右邊a ^ b=(a ^ b)^ a=a ^ b^ a=a ^ a^ b=0^ b=b, 該值賦值給a,即a=b

即經過第三步運算後a中的值為b,即a=b,將b換到了a裡

這樣經過如上的三步驟,完成了交換兩個變數a,b而無需借助第3個臨時變數過程。

這個過程等價於如下的過程,:

a=a+b

b=a-b;

a=a-b;

前提是a+b的值不能溢位。

測試程式如下:

int main()

執行結果:

[root@test cs]# ./a.out

a=4 b=5

a=5 b=4

[ 注意:當a和b相等時,該方法不適用]

--本文結束--

異或運算實現兩個數的交換

通常的交換兩個變數a,b的過程為 int temp temp a a b b temp 需借助上面的第3個臨時變數temp.採用下面的方法,對於給定兩個整數a,b,下面的異或運算可以實現a,b的交換,而無需借助第3個臨時變數 a a b b a b a a b 這個交換兩個變數而無需借助第3個臨時變...

異或運算實現兩個數的交換

通常的交換兩個變數a,b的過程為 int temp temp a a b b temp 需借助上面的第3個臨時變數temp.採用下面的方法,對於給定兩個整數a,b,下面的異或運算可以實現a,b的交換,而無需借助第3個臨時變數 a a b b a b a a b 這個交換兩個變數而無需借助第3個臨時變...

異或運算實現兩個數的交換

int temp temp a a b b temp 需借助上面的第3個臨時變數temp.採用下面的方法,對於給定兩個整數a,b,下面的異或運算可以實現a,b的交換,而無需借助第3個臨時變數 a a b b a b a a b 這個交換兩個變數而無需借助第3個臨時變數過程,其實現主要是基於異或運算的...