二进制与加法

连续进位:一列一列追踪 7+1

多位相加时,从最低位开始,每列的进位输出 Cout 成为高一列的进位输入 Cin。7+1 时,这个进位会连续传过三列,到第四列才停下,结果是 1000₂。

逐列走完 0111₂+0001₂

显示时位值从左到右是 8、4、2、1,计算时却从右边的 1 位开始。

0111₂ + 0001₂ = 1000₂

进位: 1 → 2 → 4 → 8

位值ABCinSCout
111001
210101
410101
800110
按位值 1、2、4、8 的顺序列出每一列:位值 1 的列 1+1,写 0 进 1;位值 2 的列 1+0+1,写 0 进 1;位值 4 的列 1+0+1,写 0 进 1;位值 8 的列 0+0+1,写 1,不再进位。进位箭头从每一列指向位值翻倍的下一列。结果 1000₂ 等于 8。
按位值 1、2、4、8 的顺序计算
位值ABCinSCout
111001
210101
410101
800110

进位为什么在第四列停下

前三列每列都有两份,所以写 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₂。

这个模型的边界

这里讲的是逐级依赖的概念:高一列要等低一列的进位。网页动画的快慢不代表真实电路的传播时间,现代处理器也不都用这种方式做加法。

自我检查

  1. 0111₂+0001₂ 等于多少?哪几列进位?

    答案

    1000₂,也就是 8。位值 1、2、4 对应的三列都进位,位值 8 对应的那列收到进位后写 1,不再进位。

  2. 1111₂+0001₂ 等于多少?

    答案

    10000₂,也就是 16。四列都写 0 并进位,最后的进位成为第五位,要保留。

  3. 两个 8 位输入最大能加出多少?需要几位?

    答案

    255+255=510,写作 111111110₂,需要九位,最高进位不能丢。