二进制与加法

计算机是怎么做加法的

计算机先把数字变成一串 0 和 1,再让一排加法单元从最低位开始逐列相加,每列把进位交给左边一列,最后得到的 0 和 1 再换回十进制给人看。

先把数变成 0 和 1

计算机里每一位只有两种状态,正好对应 1 和 0。所以 5 会写成 0101₂,3 会写成 0011₂,就像用四张卡牌表示一样。

每一列交给一个加法单元

每一列由一个全加器负责:输入这一列的两个数字和右边送来的进位,输出本列的和与送往左边的进位。

把四个这样的单元并排连起来,就成了一台 4 位加法机;连八个,就是 8 位加法机。

走一遍 5+3

0101₂ + 0011₂,从最低列开始,每列都把进位交给高一位。

  • 最低列:1+1,S=0,C=1。
  • 第二列:0+1 再加进位 1,S=0,C=1。
  • 第三列:1+0 再加进位 1,S=0,C=1。
  • 第四列:0+0 再加进位 1,S=1,C=0。
  • 得到 1000₂,换回十进制是 8。

0101₂ + 0011₂ = 1000₂

位值8421
A0101
B0011
进位输入 Cin1110
和 S1000
进位输出 Cout0111

进位: 8 ← 4 ← 2 ← 1

四个加法单元从右到左排列,输入 0101₂ 和 0011₂。前三列都是写 0 并向左进位,第四列收到进位后写 1,输出 1000₂,也就是十进制 8。

8 位相加为什么会有 9 位结果

8 位加法机每个输入可以是 0 到 255。两个最大的数相加,11111111₂ + 11111111₂ 等于 111111110₂,也就是 255+255=510。

最左边那个进位需要第九位来放,所以要保留最高进位,结果最多九位。这里讲的是不带符号的整数,不涉及补码和有符号溢出。

这个模型讲到哪里为止

这是一个简化的整数加法模型,用来说明逐列相加和进位传递的思路。现代 CPU 内部会用更快的进位方法和更复杂的布局,并不都是一排全加器这样排列。

自我检查

  1. 5+3 的计算中,哪几列产生了进位?

    答案

    最低三列都产生了进位,第四列收到进位后写 1,不再进位,结果 1000₂。

  2. 两个 8 位数相加,结果最多需要几位?为什么?

    答案

    最多九位。最大是 255+255=510,写作 111111110₂,最高的进位要占第九位。

  3. 每一列的加法单元需要哪些输入?

    答案

    这一列的两个数字,加上右边一列送来的进位。