1. 前言
Python 以其簡潔直觀的語法,受到眾多開發者的喜愛。尤其是在進行資料處理與演算法優化時,位元運算是不可或缺的重要工具。而其中,XOR(互斥或)運算在加密與資料操作中扮演著關鍵角色。
本文將從基礎到實際應用,深入解析 Python 中的 XOR 運算方式與使用範例。
2. 什麼是 XOR?
XOR(互斥或)是一種邏輯運算,當兩個位元不同時會回傳「1」,相同時則回傳「0」。由於這樣的特性,它廣泛應用於位元反轉、資料比對等多種情境。
XOR 的真值表
A | B | A XOR B |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
從上表可以看出,僅當 A 與 B 的值不相同時,結果才會是 1。

3. 在 Python 中進行 XOR 運算
在 Python 中,可以使用位元運算子 ^
來執行 XOR 運算。對於整數之間的 XOR,可以依照以下方式實作:
a = 5 # 二進位為 101
b = 3 # 二進位為 011
result = a ^ b
print(result) # 輸出:6(二進位為 110)
在此範例中,對 5(101)與 3(011)進行位元 XOR 運算,最終得到結果 6(110)。
對位元資料進行 XOR 運算
也可以對位元資料(binary data)進行 XOR 運算。以下是兩個位元串進行 XOR 的範例:
data1 = bytes([0b10101010, 0b11001100])
data2 = bytes([0b01010101, 0b00110011])
result = bytes([b1 ^ b2 for b1, b2 in zip(data1, data2)])
print(result) # 輸出:b'xffxff'
這段程式碼中,對 data1
與 data2
的每個位元進行 XOR 運算,並產生一個新的位元串 result
。
4. XOR 的應用範例
加密與解密
利用 XOR 的特性,可以實現簡單的加密與解密。將資料與同一個金鑰進行 XOR 運算可完成加密,之後再使用相同的金鑰進行一次 XOR 運算,即可還原原始資料。
def xor_encrypt_decrypt(data, key):
return bytes([b ^ key for b in data])
original_data = b"Hello, XOR!"
key = 0x55
encrypted_data = xor_encrypt_decrypt(original_data, key)
print(encrypted_data) # 加密後的資料
decrypted_data = xor_encrypt_decrypt(encrypted_data, key)
print(decrypted_data) # b'Hello, XOR!'
此範例中,我們將 original_data
與金鑰 0x55
進行 XOR 運算以加密,再用同樣的金鑰解密以還原資料。
位元反轉
當需要反轉特定位元時,XOR 運算也非常實用。透過使用位元遮罩(bitmask),可以只反轉指定的位元。
number = 0b1010 # 十進位為 10
mask = 0b0100 # 遮罩設定為反轉第 3 位元
result = number ^ mask
print(bin(result)) # 輸出:0b1110
這個例子中,我們反轉了 number
的第 3 位元,得到的結果為 0b1110
(十進位為 14)。
交換變數的值
透過 XOR 運算,可以在不使用暫存變數的情況下,交換兩個變數的值。
a = 5
b = 3
a = a ^ b
b = a ^ b
a = a ^ b
print(a, b) # 輸出:3 5
此方法使用 XOR 運算達成 a
和 b
的值互換。不過從可讀性與除錯角度來看,仍建議使用一般的交換方式。
5. XOR 的特性與注意事項
特性
- 交換律:
A ^ B
等於B ^ A
- 結合律:
(A ^ B) ^ C
等於A ^ (B ^ C)
- 同一律:
A ^ A
等於0
- 零律:
A ^ 0
等於A
注意事項
- 可讀性下降
使用 XOR 來交換變數或進行加密處理時,可能會使程式碼難以閱讀。為了維持可讀性,建議在使用較複雜的 XOR 運算時加入說明註解。 - 除錯困難
與其他邏輯運算相比,XOR 的除錯較為困難。尤其當多個位元運算組合在一起時,容易導致預期外的行為,因此建議在開發過程中頻繁檢查變數狀態。 - 負數的處理
在 Python 中,對負數進行位元運算時會使用補數表示方式,導致結果與正數不同。如果需要處理正負號,建議先轉為絕對值再操作,或是加入適當的條件判斷。
6. XOR 的進階應用範例
XOR 運算不僅在加密與資料處理中有應用,也常見於演算法與機器學習領域。以下將介紹兩個進階案例:使用 XOR Shift 演算法產生偽隨機數、以及使用神經網路解決 XOR 問題。
偽隨機數生成:XOR Shift 演算法
XOR Shift 是一種用於產生偽隨機數的簡單演算法,結合 XOR 與位元移位操作,具有記憶體使用少、運算快速的特性。
# 使用 XOR Shift 演算法產生偽隨機數
def xor_shift(seed):
seed ^= (seed << 13) & 0xFFFFFFFF
seed ^= (seed >> 17) & 0xFFFFFFFF
seed ^= (seed << 5) & 0xFFFFFFFF
return seed & 0xFFFFFFFF
# 初始化種子並產生亂數
seed = 12345
for _ in range(5):
seed = xor_shift(seed)
print(seed)
這個範例中,我們以 XOR Shift 演算法對初始種子值進行多次處理,產生多個偽隨機數。雖然不適合用於加密,但非常適合用於需要輕量級亂數的場景。
神經網路:解決 XOR 問題
XOR 問題是一個經典的機器學習挑戰,其邏輯無法被單一線性分類器處理,因此需透過神經網路來解決。以下使用 Python 的 scikit-learn
套件實作解法。
from sklearn.neural_network import MLPClassifier
from sklearn.metrics import accuracy_score
# XOR 問題資料集
X = [[0, 0], [0, 1], [1, 0], [1, 1]]
y = [0, 1, 1, 0] # XOR 對應的輸出
# 建立多層感知器模型
model = MLPClassifier(hidden_layer_sizes=(2,), activation='relu', max_iter=1000)
model.fit(X, y)
# 顯示預測結果
predictions = model.predict(X)
print("預測結果:", predictions)
print("準確率:", accuracy_score(y, predictions))
此程式透過 MLPClassifier
建立一個具有隱藏層的神經網路模型,成功學習 XOR 的非線性邏輯。這是入門機器學習與 AI 的實用範例。

7. 結語
本文從基本概念到進階範例,深入介紹了 Python 中的 XOR 運算。雖然 XOR 是一種簡單的位元運算,但在加密、資料處理、演算法優化等多個領域都有實用價值。以下是本文的重點回顧:
本文要點
- XOR 的基本概念
XOR(互斥或)在兩個位元不同時會回傳 1,相同則回傳 0,常用於反轉位元與檢查資料差異。 - 如何在 Python 中實作 XOR
使用位元運算子^
即可實作 XOR,適用於整數與位元資料。 - XOR 的應用範例
包括加密、位元反轉、不使用暫存變數的值交換等多種用途。 - XOR 的特性與注意事項
理解交換律、結合律等特性有助於應用;除錯與負數處理需格外留意。 - XOR 的進階應用:偽隨機數與神經網路
透過 XOR Shift 產生亂數,並使用 MLP 模型解決 XOR 問題,展示其在演算法與 AI 領域的潛力。
未來應用的建議
XOR 運算是一項強大且高效的工具,無論是在資料加密、位元操作,或是演算法設計中皆能發揮重要作用。透過學習 Python 中的 XOR 應用,你將能掌握更高階的資料處理技巧,並為未來進入演算法與機器學習領域打下良好基礎。希望本文能幫助你更深入理解 XOR,並靈活應用於各種開發場景中。