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 输出就是这种三输入奇偶性奇偶性 表示值为 1 的位数是奇数还是偶数。奇偶校验能检测奇数个位错误,但可能漏掉偶数个位错误。,cout 则表示 1 的个数是否至少为两个。在下方构造 111,可得到 sum=1、cout=1,整数和为 1+2×1=31+2\times1=3。

三个输入:奇数个与多数表决并不相同

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 位串与相等比较结果。若对 XOR 位串再做 XOR 归约来判断“相等”,会出现什么问题?

阅读解释

XOR 位串为 0011,相等结果为 0。将两个不匹配位 XOR 会相互抵消为 0,再取反便错误地得到相等=1。因此应对不匹配位做 OR 归约。

你的选择适用于此浏览器,可随时在页脚更改。