C語言 異或 的妙用

2021-09-11 21:14:42 字數 742 閱讀 8304

異或^:位運算符號,相同的位置0,不同的位置1:

例:0101^0001=0100

給定乙個非空整數陣列,除了某個元素只出現一次以外,其餘每個元素均出現兩次。找出那個只出現了一次的元素。

說明:你的演算法應該具有線性時間複雜度。 你可以不使用額外空間來實現嗎?

例:輸入 2 2 1 輸出 1 ,輸入 2 3 3 1 2 輸出 1

c語言實現:

int singlenumber(int* nums, int numssize) {

int result=0;

for(int i=0;i彙總:

(1) 使某些特定的位翻轉

例如對數10100001的第2位和第3位翻轉,則可以將該數與00000110進行按位異或運算。

10100001^00000110 = 10100111

(2) 實現兩個值的交換,而不必使用臨時變數。

例如交換兩個整數a=10100001,b=00000110的值,可通過下列語句實現:

a = a^b;   //a=10100111

b = b^a;   //b=10100001

a = a^b;   //a=00000110

(3) 在組合語言中經常用於將變數置零:

xor a,a

(4) 快速判斷兩個值是否相等

舉例1: 判斷兩個整數a,b是否相等,則可通過下列語句實現:

return ((a ^ b) == 0)

C語言異或操作的妙用

如果想要交換2個變數,一般的做法是引入第三個變數,例如,這樣2個變數中的值就實現了交換。那能不能不引入其他變數就可以實現變數值的交換呢?答案是肯定的。用異或操作可以實現,有2種實現方法,本質上是一樣的。法1 法2 因為2種方法本質一樣,就方法一進行一下證明。異或操作滿足結合律和交換律,且由異或操作的...

C語言異或操作的妙用

如果想要交換2個變數,一般的做法是引入第三個變數,例如,cpp view plain copy temp a a b b temp 這樣2個變數中的值就實現了交換。那能不能不引入其他變數就可以實現變數值的交換呢?答案是肯定的。用異或操作可以實現,有2種實現方法,本質上是一樣的。法1 cpp view...

異或的妙用

給你1 1000個連續自然數,然後從中隨機去掉兩個,再打亂順序,要求只遍歷一次,求出被去掉的兩個數。這題其實挺為面試者的,因為要求1分鐘內說出解法,且不能使用計算機 紙和筆。如果之前沒有遇到過類似的題目,加上面試時的緊張心情,很難能在那麼短的時間裡想到解決方案,至少我做不到。好在我有時間,上網看了一...