什麼是位元 XOR 計算機?
位元 XOR(互斥或,exclusive OR)計算機會接收兩個整數,並逐位元(bit)進行運算。在每一個位元位置上,當兩個輸入位元「不同」時,輸出為 1;當兩者「相同」時,輸出為 0。這是程式設計、數位邏輯、密碼學與錯誤偵測中最基礎的運算之一。
如何使用
輸入第一個整數(A)與第二個整數(B),接著送出即可。計算機會回傳十進位的 XOR 結果,同時提供二進位與十六進位表示法,方便你逐位元驗證。正整數與負整數都可以使用。
公式說明
在大多數程式語言中,XOR 寫作 A ^ B;在數學符號中則寫作 $$\text{Result} = \text{A} \oplus \text{B}$$ 單一位元的真值表為:\(0\oplus0=0\)、\(0\oplus1=1\)、\(1\oplus0=1\)、\(1\oplus1=0\)。此運算會獨立套用到每一組對應的位元。一個實用的特性是:A ^ A = 0 以及 A ^ 0 = A,這也正是 XOR 常被用來交換變數值與切換旗標(flag)的原因。
實例演算
假設 \(A = 12\)、\(B = 10\)。換成二進位,\(12 = 1100\)、\(10 = 1010\)。逐欄比較:\(1\oplus1=0\)、\(1\oplus0=1\)、\(0\oplus1=1\)、\(0\oplus0=0\),得到 \(0110 = 6\)。因此 $$12 \oplus 10 = 6$$
位元運算比較
每個位元運算一次處理一個位元。對於每一對輸入位元 \(A\) 和 \(B\),運算產生一個單一輸出位元。下表顯示六個最常見運算的完整單一位元真理表。XOR(互斥或,記作 \(A \oplus B\))只有在兩個輸入位元不同時才輸出 1。
| A | B | AND (A&B) | OR (A|B) | XOR (A^B) | NAND ~(A&B) | NOR ~(A|B) | XNOR ~(A^B) |
|---|---|---|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 | 1 | 1 | 1 |
| 0 | 1 | 0 | 1 | 1 | 1 | 0 | 0 |
| 1 | 0 | 0 | 1 | 1 | 1 | 0 | 0 |
| 1 | 1 | 1 | 1 | 0 | 0 | 0 | 1 |
注意 XOR 是 XNOR 的精確補集,且 XOR 恰好在輸入不相同的兩行中等於 1。這種「差異偵測器」的特性使 XOR 適用於奇偶校驗、簡單加密和位元反轉。
常見輸入對的 XOR 運算
下表對幾個代表性的輸入對進行位元 XOR 運算,分別以十進制、二進制和十六進制顯示每個運算數和結果。XOR 按位執行:將兩個二進制數對齊,在位元不相同的地方輸出 1。
| A | B | A(二進制) | B(二進制) | A ^ B(十進制) | A ^ B(二進制) | A ^ B(十六進制) |
|---|---|---|---|---|---|---|
| 5 | 3 | 0101 | 0011 | 6 | 0110 | 0x6 |
| 255 | 15 | 11111111 | 00001111 | 240 | 11110000 | 0xF0 |
| 12 | 12 | 1100 | 1100 | 0 | 0000 | 0x0 |
| 7 | 0 | 0111 | 0000 | 7 | 0111 | 0x7 |
| 10 | 6 | 1010 | 0110 | 12 | 1100 | 0xC |
| -1 | 1 | …11111111 | …00000001 | -2 | …11111110 | 0x…FE |
有兩個模式很突出。當運算數為 0 時,XOR 傳回另一個運算數不變(\(7 \oplus 0 = 7\))。當兩個運算數相同時,XOR 傳回 0(\(12 \oplus 12 = 0\))。負數範例使用二補數表示:\(-1\) 是全 1 位元,所以將其與任何值進行 XOR 會翻轉每個位元(等同於位元 NOT),得到 \(-1 \oplus 1 = -2\)。
常見問題
XOR 是什麼意思?就是互斥或(Exclusive OR)-只有在兩個輸入中「恰好只有一個」為真(1)時,結果才為真。
為什麼密碼學會用到 XOR?因為用金鑰對資料做 XOR 是可逆的:再用同一把金鑰做一次 XOR,就能還原出原始資料(\(A \oplus K \oplus K = A\))。
支援負數嗎?支援。負數採用二補數(two's-complement)表示法,因此負數的二進位顯示可能會包含許多位元。