異或交換變量

一般的交換兩個變量a,b的過程爲
spa

int temp;orm

temp=ait

a=b;變量

b=temp;
方法

需藉助上面的第3個臨時變量temp.margin


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

    a = a ^ b;
    b = a ^ b;
    a = a ^ b;
di

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

1.任意一個變量X與其自身進行異或運算,結果爲0,即X^X=0background

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的值不能溢出。

相關文章
相關標籤/搜索