Altifigence Academy

5 / 63 · 概念

XOR、XNOR:相同、相異與同位檢查

區分雙輸入 XOR 與多輸入同位運算,說明錯誤偵測的限制。

判斷兩個位元是否不同的邏輯閘

XOR 在兩個輸入不同時為 1,XNOR 在兩者相同時為 1。

a⊕b=a‾b+ab‾,a⊕b‾=ab+a‾ b‾a\oplus b=\overline a b+a\overline b,\qquad \overline{a\oplus b}=ab+\overline a\,\overline b

OR 與 XOR 在 00、01、10 時相同,在 11 時不同。XOR 符號是在 OR 前方多一條曲線;XNOR 還會加上輸出反相反相是將 0 變為 1、1 變為 0 的 NOT 運算。公式上方的橫線表示對線下的整個運算式套用 NOT。 詳細內容圓圈。

在 11 時比較 OR 與 XOR
XOR · 真值表
aby
000
011
101
110

三個以上輸入時,不再是「恰好一個」

XOR 滿足結合律,可依序計算 a⊕b⊕ca\oplus b\oplus c。輸入中 1 的個數為奇數時,結果為 1。111 的結果也是 1,因此不能把「恰好一個輸入為 1」的說明直接延伸。

全加器的 sum 輸出就是這個三輸入同位值同位性(parity)表示值為 1 的位元個數是奇數或偶數。同位檢查能偵測奇數個位元錯誤,但可能漏掉偶數個位元錯誤。,cout 則表示 1 的個數是否至少為二。下方設成 111 時,sum=1、cout=1,整數總和為 1+2×1=31+2\times1=3。

三個輸入:奇數個 1 與多數決不同

a + b + cin = sum + 2 × cout

同位檢查只能偵測特定類型的錯誤

資料 d3d2d1d0=1011d_3d_2d_1d_0=1011 的偶同位位元為 p=d3⊕d2⊕d1⊕d0=1p=d_3\oplus d_2\oplus d_1\oplus d_0=1,資料和 p 一起 XOR 的結果為 0。傳送中若有奇數個位元翻轉,整體 XOR 會變成 1,因而偵測到錯誤。偶數個位元翻轉則可能無法偵測;單一同位位元也無法指出錯誤位置。

比較位元序列是否相同

要檢查向量 A 與 B 是否相同,可將各位元 XOR 的結果用 OR 合併。

equal=⋁i(Ai⊕Bi)‾equal=\overline{\bigvee_i(A_i\oplus B_i)}

只要有一個位元不相符,OR 就為 1。將整體反相後,只有全部位元相同才為 1。若實作成「把各 XOR 再全部 XOR 就能判斷相等」,兩個不相符位元會互相抵消,造成錯誤。

自己試試看

A=1010、B=1001 時,求出 XOR 位元序列與 equality 結果。若再對 XOR 位元序列做 XOR 歸約來判斷「相等」,會有什麼問題?

查看解說

XOR 位元序列為 0011,相等結果為 0。兩個不相符位元經 XOR 會互相抵消成 0,再反相便錯誤得到相等=1。不相符位元應以 OR 歸約。

此選擇適用於本瀏覽器,隨時可從頁尾變更。