二进制与加法
为什么加法要同时用 AND 和 XOR
一位加法要回答两个问题:本列剩不剩一份,要不要向高一位进位。XOR 回答第一个,AND 回答第二个,所以两者要一起用。
两个问题,两种门
XOR 在两个输入恰好一个是 1 时输出 1,表示本列剩下一份。AND 在两个输入都是 1 时输出 1,表示凑成一对,要送到高一位。
| A | B | XOR → S · 和 | AND → C · 进位 |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
| A | B | XOR | AND | OR |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 1 | 0 | 1 |
| 1 | 1 | 0 | 1 | 1 |
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。
自我检查
A=1、B=1 时,XOR、AND、OR 各输出什么?
答案
XOR 输出 0,AND 输出 1,OR 输出 1。正确结果是本列留 0、进位 1,所以要用 XOR 和 AND。
A=0、B=1 时,XOR 和 AND 各输出什么?
答案
XOR 输出 1,AND 输出 0,表示本列留一份,不进位。
为什么输出 C=1、S=0 代表 2?
答案
C 在高一位,代表两份;S 在本列,代表一份。2×1+0=2,写作 10₂。