C語言異或操作的妙用

2021-06-19 19:30:05 字數 728 閱讀 6527

如果想要交換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分鐘內說出解法,且不能使用計算機 紙和筆。如果之前沒有遇到過類似的題目,加上面試時的緊張心情,很難能在那麼短的時間裡想到解決方案,至少我做不到。好在我有時間,上網看了一...