二进制与加法

半加器:真值表和每种输入的结果

半加器把两个一位输入 A 和 B 相加,输出和 S 与进位 C。S 等于 A XOR B,C 等于 A AND B。把 C 写在左、S 写在右,就是这次相加的两位二进制结果。

四种输入逐一看

A 和 B 各只有 0 和 1 两种可能,所以一共四种输入。

  • A=0、B=0:总共 0,S=0,C=0,结果 00₂。
  • A=0、B=1:总共 1 份,留在本列,S=1,C=0,结果 01₂。
  • A=1、B=0:同样 1 份,S=1,C=0,结果 01₂。
  • A=1、B=1:两份凑成一对,本列不留,S=0,向高一位送出 C=1,结果 10₂。
半加器真值表:S 为和,C 为进位
ABSC
0000
0110
1010
1101

XOR 和 AND 各管什么

XOR 在两个输入恰好一个是 1 时输出 1,正好回答“本列是否剩下一份”。AND 只在两个输入都是 1 时输出 1,正好回答“是否凑成一对,要进位”。

所以 S 由 XOR 给出,C 由 AND 给出。两个输出代表的位值不同,不能当成同一份相加。

A = 0, B = 0

和: S = 0

进位: C = 0

0 + 0 = 0₂

A = 0, B = 1

和: S = 1

进位: C = 0

0 + 1 = 1₂

A = 1, B = 0

和: S = 1

进位: C = 0

1 + 0 = 1₂

A = 1, B = 1

和: S = 0

进位: C = 1

1 + 1 = 10₂

按输入组合 00、01、10、11 的顺序:前三组 C 都是 0,其中 01 和 10 的 S 是 1;11 这一组 S 变成 0,C 变成 1。

用 A+B=2C+S 检查

S 在本列代表一份,C 在高一位代表两份。所以每一行都应满足 A+B 等于 2 乘 C 再加 S。

比如 A=1、B=1:A+B=2,C=1、S=0,2×1+0=2,正好相等。这里的一份是相对本列而言,放到多位加法里不一定是十进制 1。

半加器没有进位输入

半加器只有 A、B 两个输入,没有 Cin。多位加法里,除最低一列外,每列还可能收到右边送来的进位,这时一列有三个输入,半加器就不够用了,需要全加器。

自我检查

  1. A=0、B=1 时,半加器输出什么?

    答案

    恰好一个 1,XOR 输出 1,AND 输出 0,所以 S=1、C=0,结果 01₂,也就是 1。

  2. A=1、B=1 时 S=0,这是不是说总和是 0?

    答案

    不是。总和是 2,被表示成 C=1、S=0。C 在高一位代表两份,2×1+0=2,结果写作 10₂。

  3. 半加器能直接把三个一位输入加起来吗?

    答案

    不能。它只有 A 和 B 两个输入,没有 Cin。三个输入要用全加器。