使用異或運算 不借助臨時變數交換兩個數

2021-07-30 08:25:05 字數 766 閱讀 3504

通常交換兩個變數需借助乙個臨時變數,如:

int temp;

temp=a

a=b;

b=temp;

使用異或可以不借助臨時變數交換兩個數:

a = a ^ b;

b = a ^ b;

a = a ^ b;

這是用了異或的自反性性質做到的:a ^ b^ b =  a ^ 0 =  a

具體推導過程:

第一步:a = a ^ b;

第二步:b = a ^ b= (a ^ b)

^ b = a;   經過第一步的運算,a已經變成了a ^ b,代入運算後,b就變成a

第三步:a = a ^ b=  

(a ^ b) ^ a = b;  a還是a ^ b,經過第二步b已經變成了a

不過有個坑....attention please!a和b不能相等!

如果a跟b相等,第一步就錯了 a = a ^ b = 0

交換a,b(不借助中間變數)

交換a,b 不借助中間變數 1 加減法 該方法可以交換整型和浮點型數值的變數,但在處理浮點型的時候有可能出現精度的損失 a a b b a b a a b 2 異或法 可以完成對整型變數的交換,對於浮點型變數它無法完成交換。a a b b a b a a b 3 乘除法 可以處理整型和浮點型變數,但...

不借助變數交換兩個數

文章 不借助if switch等語句求兩個數較大的乙個 交換兩個數在排序演算法中用的很多 氣泡排序中 插入排序中等等。正常的交換兩個數是借助乙個變數tmp void swap int a,int b 在面試題中有這樣的題目 不借助第三個變數,交換兩個數 a方法 void swap int a,int...

(異或運算的使用)不使用臨時變數交換倆個元素的值

我們使用的運算是 異或運算。簡稱為 不進製的加法運算 首先我們假設a 001 b 010那麼我們給a賦值 a a b 011 此時我們接著進行 a b 計算結果賦值給b b a b 001 接著進行 a b 計算結果賦值給a a a b 010 這樣我們便沒有使用任何變數交換了來個變數的值。void...