通常交換兩個變數需借助乙個臨時變數,如:
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...