二进制与加法
计算机是怎么做加法的
计算机先把数字变成一串 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₂
| 位值 | 8 | 4 | 2 | 1 |
|---|---|---|---|---|
| A | 0 | 1 | 0 | 1 |
| B | 0 | 0 | 1 | 1 |
| 进位输入 Cin | 1 | 1 | 1 | 0 |
| 和 S | 1 | 0 | 0 | 0 |
| 进位输出 Cout | 0 | 1 | 1 | 1 |
进位: 8 ← 4 ← 2 ← 1
8 位相加为什么会有 9 位结果
8 位加法机每个输入可以是 0 到 255。两个最大的数相加,11111111₂ + 11111111₂ 等于 111111110₂,也就是 255+255=510。
最左边那个进位需要第九位来放,所以要保留最高进位,结果最多九位。这里讲的是不带符号的整数,不涉及补码和有符号溢出。
这个模型讲到哪里为止
这是一个简化的整数加法模型,用来说明逐列相加和进位传递的思路。现代 CPU 内部会用更快的进位方法和更复杂的布局,并不都是一排全加器这样排列。
自我检查
5+3 的计算中,哪几列产生了进位?
答案
最低三列都产生了进位,第四列收到进位后写 1,不再进位,结果 1000₂。
两个 8 位数相加,结果最多需要几位?为什么?
答案
最多九位。最大是 255+255=510,写作 111111110₂,最高的进位要占第九位。
每一列的加法单元需要哪些输入?
答案
这一列的两个数字,加上右边一列送来的进位。