1.什么是異或運算
異或,英文為exclusive OR,縮寫成xor。 異或(xor)是一個數學運算符。它應用於邏輯運算。異或的數學符號為“⊕”,計算機符號為“xor”。如果a、b兩個值不相同,則異或結果為1。如果a、b兩個值相同,異或結果為0。
異或也叫半加運算,其運算法則相當於不帶進位的二進制加法:二進制下用1表示真,0表示假,則異或的運算法則為:0⊕0=0,1⊕0=1,0⊕1=1,1⊕1=0(同為0,異為1),這些法則與加法是相同的,只是不帶進位,所以異或常被認作不進位加法。

2.異或運算的特性
- 交換律:A⊕B = B⊕A
- 結合律:A⊕(B⊕C) = (A⊕B)⊕C
- 恆等律:X⊕0 = X
- 歸零律:X⊕X = 0
- 自反律:A⊕B⊕B = A⊕(B⊕B) = A⊕0 = A
3.XOR在計算機中的應用
3.1 快速比較兩值是否想等
r = a xor b if r==0 print(“a == b”) else print(“a != b")
3.2. 檢驗一個數字中1的個數的奇偶(奇偶校驗)
求10100001中1的個數 1 ^ 0 ^ 1 ^ 0 ^ 0 ^ 0 ^ 0 ^ 1 = 1 按位進行異或運算得到的結果等於1,結果為奇數,得到的結果為0,結果為偶數
3.3. 不使用中間變量,交換兩個變量的值
a = a ^ b; b = a ^ b; //a ^ b ^ b = a ^ 0 = a; a = a ^ b;
3.4. 面試題:一個整型數組里除了一個數字之外,其他的數字都出現了兩次,找出這個數字
利用異或運算的歸零律:X⊕X = 0 和恆等律:X⊕0 = X
對於數組{a, a, b, b, c, c, d},找出只出現了一次的數字d a^a^b^b^c^c^d = 0^0^0^d = 0^d = d 時間復雜度為O(N), 空間復雜度為O(1)
3.5. 密碼學中對稱加密解密
利用異或運算的自反律: A⊕B⊕B = A⊕(B⊕B) = A⊕0 = A
Message XOR Key // CipherText CipherText XOR Key // Message 明文 XOR 密鑰 --> 密文 密文 XOR 密鑰 --> 明文
以上特性很好地對應了加密和解密的過程。所以目前很多加密算法都利用了異或算法的這個特性來做最后的密文打亂的工作。
