二进制与加法
半加器和全加器有什么区别:进位输入讲清楚
半加器只加两个一位输入 A 和 B。全加器多了一个进位输入 Cin,能把右边一列送来的进位一起加上。正因为多了这一个输入,全加器才能一列接一列地做多位加法。
两者的输入和输出
半加器有两个输入 A、B,两个输出:和 S 等于 A XOR B,进位 C 等于 A AND B。把 C 和 S 并排写成 CS,就是这次相加的两位二进制结果。
全加器有三个输入 A、B、Cin,两个输出:S 等于 A+B+Cin 除以 2 的余数,Cout 等于 A+B+Cin 除以 2 再向下取整。Cin=1 时,本列多算一份本列的位值;Cin=0 时不多算。它只影响这一列,不是给整道题固定加上十进制的 1。
半加器真值表
四行列出 A、B 的全部组合。
| A | B | C | S |
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 0 |
全加器真值表
八行按 A、B、Cin 的组合依次排列。每一行的三个数字是三个独立输入各自的取值,比如 111 表示 A=1、B=1、Cin=1。不要把这组输入当作一个三位二进制数来读;如果真把 111 当成一个二进制数,它会是十进制 7,和这里的意思无关。
| A | B | Cin | S | Cout |
|---|---|---|---|---|
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 1 | 0 |
| 0 | 1 | 0 | 1 | 0 |
| 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 1 | 0 | 1 |
| 1 | 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 1 | 1 |
两台半加器先后相加
全加器可以理解为分两步:第一台半加器先算 A+B,得到一个和与一个进位;第二台半加器再把第一步的和与 Cin 相加,得到最终的 S。两步各自可能产生的进位合并起来,就是 Cout,两者不会同时为 1。
注意第一台已经产生的 2 点进位不会再送进第二台的 1 点输入,它直接去合并成 Cout。课程里是用加法盒子分两次相加来体验这个过程,不需要亲手接线或单独搭建 OR 门。
半加器
输入
输出
1 + 1 = 10₂ = 2
全加器
输入
输出
1 + 1 + 1 = 11₂ = 3
自我检查
半加器和全加器最关键的区别是什么?
答案
全加器多一个进位输入 Cin,能把右边一列送来的进位一起加上;半加器只加 A 和 B。
全加器输入 A=1、B=0、Cin=1,输出是什么?
答案
1+0+1 等于 2,所以 S=0、Cout=1。
全加器真值表里的 110 是什么意思?
答案
表示 A=1、B=1、Cin=0 这一组输入,不是二进制数 110。此时 S=0、Cout=1。