Menu Close

为什么 XOR 门在计算机内部如此重要?

XOR 门,也就是异或门,是计算机内部最重要的逻辑门之一。

为什么 XOR 门在计算机内部如此重要?

乍看之下,XOR 似乎只是和 AND、OR 类似的一种布尔运算。

但 XOR 有一个非常特殊的性质:

当两个输入位不同时,XOR 输出 1。

就是这样一个简单的规则,却让 XOR 在数字系统中变得非常有用。

XOR 广泛出现在二进制加法、减法、ALU、位操作、比较电路、错误检测以及密码学中。

那么,为什么这样一个简单的逻辑门,会在计算机内部如此重要?

下面我们来看看。

1. 什么是 XOR 门?

XOR 是:

Exclusive OR,也就是异或。

对于两个输入 A 和 B:

A = 0,B = 0 → 输出 = 0

A = 0,B = 1 → 输出 = 1

A = 1,B = 0 → 输出 = 1

A = 1,B = 1 → 输出 = 0

最关键的一点就是:

当两个输入不同时,XOR 输出 1。

如果两个输入相同,XOR 就输出 0。

这也是为什么我们可以把 XOR 看成一个简单的:

差异检测器。

如果两个 bit 相同,结果就是 0。

如果两个 bit 不同,结果就是 1。

2. XOR 是二进制加法的关键

XOR 最重要的用途之一,就是二进制加法。

先来看两个单独 bit 的加法:

0 + 0 = 0

0 + 1 = 1

1 + 0 = 1

1 + 1 = 10

如果我们只看结果中的 Sum,也就是和位:

0 + 0 → Sum = 0

0 + 1 → Sum = 1

1 + 0 → Sum = 1

1 + 1 → Sum = 0

这和 XOR 的真值表完全一样。

因此:

Sum = A XOR B

但是,当:

1 + 1 = 10

的时候,我们还需要产生一个进位。

这个进位可以通过 AND 门得到:

Carry = A AND B

于是,一个 XOR 门加上一个 AND 门,就可以组成最基本的:

半加器 Half Adder

XOR 负责计算 Sum,也就是和位。

AND 负责计算 Carry,也就是进位。

这也是最典型的例子之一:几个非常简单的逻辑门,组合起来之后,就变成了真正的算术硬件。

3. XOR 被用在全加器中

半加器只能对两个 bit 做加法。

但是,真正的处理器必须计算更大的二进制数字。

在进行多位二进制加法时,每一个 bit 除了自己的两个输入之外,还可能收到前一位产生的进位。

这时候就需要:

全加器 Full Adder

一个全加器有三个输入:

A

B

Carry-in,也就是输入进位

同时产生两个输出:

Sum

Carry-out

其中 Sum 可以表示为:

A XOR B XOR Carry-in

这意味着,在二进制加法器内部,会反复使用 XOR。

一个 32 位处理器可能需要对 32 个 bit 进行加法。

一个 64 位处理器则需要处理 64 个 bit。

现代 CPU 实际使用的加法器设计比最简单的全加器链复杂得多,因为还需要解决速度和进位传播问题。

但 XOR 依然是这些加法电路背后最基本的逻辑之一。

这也是 XOR 在 CPU 内部如此重要的主要原因之一。

4. XOR 出现在 ALU 内部

ALU,也就是:

Arithmetic Logic Unit,算术逻辑单元

是处理器内部最重要的部件之一。

ALU 可以执行很多基本运算,例如:

加法

减法

AND

OR

XOR

比较

以及其他位运算。

很多 CPU 指令集都会直接提供 XOR 指令。

假设我们有两个二进制数:

10110100

和:

11000101

对它们执行 XOR,结果是:

01110001

这里,每一个 bit 都单独进行 XOR 运算。

如果两个输入 bit 相同,结果就是 0。

如果两个输入 bit 不同,结果就是 1。

因此,当软件或者硬件需要找出两个二进制数据之间到底有哪些 bit 不同的时候,XOR 非常有用。

5. XOR 还可以帮助实现减法

XOR 在减法电路里同样非常重要。

计算机通常使用:

二进制补码 Two’s Complement

来完成减法。

这样,处理器就不需要设计一套完全独立的减法器。

ALU 可以重复使用已有的加法电路。

要计算:

A − B

处理器实际上可以计算:

A + NOT B + 1

也就是说,先把 B 的每一个 bit 反转,然后再加 1。

而 XOR 正好可以帮助完成 B 的反转。

因为:

B XOR 0 = B

也就是说,输入不发生变化。

但是:

B XOR 1 = NOT B

每一个 bit 都会被翻转。

因此,ALU 可以使用一个控制信号。

如果控制信号是 0,就进行普通加法。

如果控制信号是 1,XOR 门就会先把 B 的各个 bit 翻转,然后利用二进制补码进行减法。

这样,加法和减法就可以共享大量硬件。

这也是数字电路设计中非常漂亮的一种做法:

用简单的逻辑控制,重复利用已有硬件。

6. XOR 可以选择性翻转 bit

XOR 在位操作中也非常有用。

只需要记住两条规则:

A XOR 0 = A

A XOR 1 = NOT A

也就是说:

和 0 做 XOR,原来的 bit 不变。

和 1 做 XOR,原来的 bit 翻转。

因此,我们可以使用一个二进制 mask,也就是掩码,来决定哪些 bit 需要改变。

例如:

10101100

XOR:

00001111

结果是:

10100011

前面四个 bit 和 0 做 XOR,所以保持不变。

后面四个 bit 和 1 做 XOR,所以全部翻转。

这种方法在很多底层程序中都很常见,例如:

操作系统

嵌入式系统

设备驱动

图形处理

网络程序

硬件控制

XOR 因此成为非常实用的 bit manipulation,也就是位操作工具。

7. XOR 可以比较二进制数据

因为 XOR 可以检测两个 bit 是否不同,所以它也非常适合用于比较二进制数据。

假设:

A = 1011

B = 1011

那么:

A XOR B = 0000

所有 bit 都完全相同。

现在假设:

A = 1011

B = 1001

那么 XOR 之后,会在不同的位置产生一个 1。

也就是说,XOR 的结果直接告诉我们:

两个二进制数据到底有哪些 bit 不一样。

因此,我们可以得到一个非常重要的规则:

如果 A XOR B 等于 0,那么 A 和 B 完全相同。

这让 XOR 成为检测二进制数据差异的一种非常简单的方法。

8. XOR 对错误检测非常重要

计算机内部的数据一直在移动。

数据会在 CPU 和内存之间移动。

会通过网络传输。

也会在存储设备之间读写。

只要数据需要传输,就存在出错的可能。

XOR 广泛用于各种错误检测机制。

最简单的例子之一,就是:

Parity,奇偶校验

XOR 可以帮助判断一组 bit 中包含的 1 的数量是奇数还是偶数。

系统可以为一组数据计算一个 parity bit,也就是奇偶校验位,并把它和原始数据一起存储或者传输。

接收方收到数据之后,再重新计算一次 parity。

如果计算出来的结果和预期不同,就说明数据在传输或者存储过程中可能发生了变化。

更加复杂的错误检测技术同样大量使用 XOR。

其中一个非常重要的例子就是:

CRC,Cyclic Redundancy Check,循环冗余校验

CRC 广泛应用于:

网络

存储设备

通信系统

CRC 在底层进行二进制运算时,会大量使用 XOR。

所以 XOR 的作用不仅仅局限在 CPU 算术运算里。

它还帮助计算机检查数据在传输过程中有没有被破坏。

9. XOR 被广泛用于密码学

XOR 也是密码学中最常见的运算之一。

其中一个重要原因,是 XOR 具有一些非常有用的性质。

例如:

A XOR A = 0

A XOR 0 = A

还有:

A XOR B XOR B = A

最后这个性质非常有意思。

如果我们知道另外一个值,XOR 是可以逆转的。

例如:

Data XOR Key = Result

然后:

Result XOR Key = Data

也就是说,用同一个 Key 再做一次 XOR,就可以恢复原来的数据。

当然,这并不意味着简单地把数据和一个 Key 做 XOR,就能够得到安全的加密算法。

真正的现代密码算法要复杂得多。

但是 XOR 仍然是许多密码算法中的基本组成部分。

原因很简单:

它速度快。

逻辑简单。

而且非常适合处理二进制数据。

10. 为什么 XOR 如此重要?

XOR 之所以重要,是因为一个非常简单的逻辑操作,却能够完成很多不同的工作。

它可以判断两个 bit 是否不同。

它可以生成二进制加法中的 Sum。

它可以帮助 ALU 实现减法。

它可以选择性翻转 bit。

它可以比较两个二进制数据。

它可以用于 parity 和错误检测。

它大量出现在 CRC 电路中。

它也是密码学中非常常见的基本运算。

更重要的是,XOR 可以非常高效地用数字硬件实现。

现代处理器每秒需要执行极其庞大的逻辑运算。

因此,像 XOR 这样简单、快速而又用途广泛的操作,对计算机硬件来说非常有价值。

Conclusion

XOR 门看起来非常简单,但它在计算机内部承担着非常重要的作用。

它最基本的规则很好记:

两个 bit 相同,输出 0。

两个 bit 不同,输出 1。

但是从这样一个简单的规则出发,计算机却可以构建出大量更复杂的功能。

在加法器中:

XOR 负责计算 Sum。

在 ALU 中:

XOR 参与算术和逻辑运算。

在 bit manipulation 中:

XOR 可以选择性翻转 bit。

在比较电路中:

XOR 可以找出两个数据之间的差异。

在 parity 和 CRC 系统中:

XOR 可以帮助检测数据错误。

在密码学中:

XOR 可以高效地组合和变换二进制信息。

所以,XOR 远远不只是数字逻辑图中的一个普通逻辑门。

它是连接布尔逻辑、二进制算术、CPU、网络、存储以及计算机安全的重要基础模块之一。

理解 XOR,也就等于向真正理解计算机内部工作原理又迈进了一步。

Posted in 数字逻辑教程