二进制与加法

为什么加法要同时用 AND 和 XOR

一位加法要回答两个问题:本列剩不剩一份,要不要向高一位进位。XOR 回答第一个,AND 回答第二个,所以两者要一起用。

两个问题,两种门

XOR 在两个输入恰好一个是 1 时输出 1,表示本列剩下一份。AND 在两个输入都是 1 时输出 1,表示凑成一对,要送到高一位。

ABXOR → S · 和AND → C · 进位
0000
0110
1010
1101
四行输入 00、01、10、11 对照 XOR 和 AND:XOR 在 01 和 10 时为 1,AND 只在 11 时为 1。
四种输入下三种门的输出
ABXORANDOR
00000
01101
10101
11011

OR 为什么不行

OR 只要有一个输入是 1 就输出 1。前三行它和 XOR 一样,但在 A=1、B=1 时 OR 输出 1,而本列应该留 0,所以 OR 不能代替和位。

AND 和 XOR 的输出也不能直接相加:AND 的 1 代表高一位的两份,XOR 的 1 代表本列的一份,权重不同。

全加器怎样复用它们

全加器里,第一台半加器用 XOR 和 AND 处理 A 和 B,第二台再用 XOR 和 AND 处理第一步的和与 Cin。这里的 OR 只用来合并两台半加器的进位,因为两个进位不会同时是 1。

自我检查

  1. A=1、B=1 时,XOR、AND、OR 各输出什么?

    答案

    XOR 输出 0,AND 输出 1,OR 输出 1。正确结果是本列留 0、进位 1,所以要用 XOR 和 AND。

  2. A=0、B=1 时,XOR 和 AND 各输出什么?

    答案

    XOR 输出 1,AND 输出 0,表示本列留一份,不进位。

  3. 为什么输出 C=1、S=0 代表 2?

    答案

    C 在高一位,代表两份;S 在本列,代表一份。2×1+0=2,写作 10₂。