二进制与加法
连续进位:一列一列追踪 7+1
多位相加时,从最低位开始,每列的进位输出 Cout 成为高一列的进位输入 Cin。7+1 时,这个进位会连续传过三列,到第四列才停下,结果是 1000₂。
逐列走完 0111₂+0001₂
显示时位值从左到右是 8、4、2、1,计算时却从右边的 1 位开始。
0111₂ + 0001₂ = 1000₂
进位: 1 → 2 → 4 → 8
| 位值 | A | B | Cin | S | Cout |
|---|---|---|---|---|---|
| 1 | 1 | 1 | 0 | 0 | 1 |
| 2 | 1 | 0 | 1 | 0 | 1 |
| 4 | 1 | 0 | 1 | 0 | 1 |
| 8 | 0 | 0 | 1 | 1 | 0 |
| 位值 | A | B | Cin | S | Cout |
|---|---|---|---|---|---|
| 1 | 1 | 1 | 0 | 0 | 1 |
| 2 | 1 | 0 | 1 | 0 | 1 |
| 4 | 1 | 0 | 1 | 0 | 1 |
| 8 | 0 | 0 | 1 | 1 | 0 |
进位为什么在第四列停下
前三列每列都有两份,所以写 0 并向上进位。第四列 A 和 B 都是 0,只有进位这一份,留下 S=1,Cout=0,传递就此结束。
2 位、4 位、8 位用同一规则
加法机变宽只是多接几列,每列规则不变。2 位、4 位、8 位输入分别能表示 0 到 3、0 到 15、0 到 255,两个输入的最大和分别是 6、30、510。
最高一列的进位要保留,结果可能需要 3、5、9 位。例如 3+3=110₂,15+1=10000₂,255+1=100000000₂。
这个模型的边界
这里讲的是逐级依赖的概念:高一列要等低一列的进位。网页动画的快慢不代表真实电路的传播时间,现代处理器也不都用这种方式做加法。
自我检查
0111₂+0001₂ 等于多少?哪几列进位?
答案
1000₂,也就是 8。位值 1、2、4 对应的三列都进位,位值 8 对应的那列收到进位后写 1,不再进位。
1111₂+0001₂ 等于多少?
答案
10000₂,也就是 16。四列都写 0 并进位,最后的进位成为第五位,要保留。
两个 8 位输入最大能加出多少?需要几位?
答案
255+255=510,写作 111111110₂,需要九位,最高进位不能丢。