如果想要交換2個變數,一般的做法是引入第三個變數,
例如,
[cpp]
view plain
copy
temp = a;
a = b;
b= temp;
這樣2個變數中的值就實現了交換。那能不能不引入其他變數就可以實現變數值的交換呢?答案是肯定的。
用異或操作可以實現,有2種實現方法,本質上是一樣的。
法1:
[cpp]
view plain
copy
#include
intmain()
return
0; }
法2:
[cpp]
view plain
copy
#include
intmain()
return
0; }
因為2種方法本質一樣,就方法一進行一下證明。
異或操作滿足結合律和交換律,且由異或操作的性質知道,對於任意乙個整數a^a=0;
證:(第(2)步中的a) a = a^b = (將第(1)步中的b代入b) a^(a^b) = b;
(第(3)步中的b)b = a^b = (將第(1)步中的b代入b,將第(2)步中的a代入a) a^b^a^a^b = a^a^a^b^b = a;
證畢
C語言異或操作的妙用
如果想要交換2個變數,一般的做法是引入第三個變數,例如,這樣2個變數中的值就實現了交換。那能不能不引入其他變數就可以實現變數值的交換呢?答案是肯定的。用異或操作可以實現,有2種實現方法,本質上是一樣的。法1 法2 因為2種方法本質一樣,就方法一進行一下證明。異或操作滿足結合律和交換律,且由異或操作的...
C語言 異或 的妙用
異或 位運算符號,相同的位置0,不同的位置1 例 0101 0001 0100 給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。說明 你的演算法應該具有線性時間複雜度。你可以不使用額外空間來實現嗎?例 輸入 2 2 1 輸出 1 輸入 2 3 3...
異或的妙用
給你1 1000個連續自然數,然後從中隨機去掉兩個,再打亂順序,要求只遍歷一次,求出被去掉的兩個數。這題其實挺為面試者的,因為要求1分鐘內說出解法,且不能使用計算機 紙和筆。如果之前沒有遇到過類似的題目,加上面試時的緊張心情,很難能在那麼短的時間裡想到解決方案,至少我做不到。好在我有時間,上網看了一...