跳到正文
IGCSE·Tuition
计算机科学 · 课程

二进制加法与溢出

二进制加法看起来和平常的加法一样,直到某一列出现三个一,进位就不见了。

本页内容
  1. 加法规则是什么?
  2. 没有溢出的示范例子
  3. 有溢出的示范例子
  4. 要留意的错误
  5. 自我检查
  6. 接下来学什么

二进制(binary)加法要从右边开始逐列相加,写下一个数字,列的和达到 2 或更多时进位。如果固定位数的数最左边那一列还产生了进位,结果就**溢出(overflow)**了:它需要的位数比可用的多。

这一课用到你已经会的二进制位值,并与位深度相连,后者解释为什么固定位数有上限。

加法规则是什么?

列的和写进位
000
110
2(1 + 1)01
3(1 + 1 + 进位 1)11

每一列要加上两个位和右边那一列送来的进位。进位是最容易忘记的,所以在数字上方用一小行写出来。

没有溢出的示范例子

计算 01101011 加 00111001(8 位)。

先转换,方便之后检查:01101011 = 64 + 32 + 8 + 2 + 1 = 107,00111001 = 32 + 16 + 8 + 1 = 57。预期的和是 164。

现在从右边开始加(第 0 列是最右边那一列):

列76543210
进位(进入)11110110
第一个数01101011
第二个数00111001
结果10100100

第 0 列:1 + 1 = 10,写 0 进 1。第 1 列:1 + 0 + 1 = 10,写 0 进 1。第 2 列:0 + 0 + 1 = 1。

第 3 列:1 + 1 = 10,写 0 进 1。第 4 列:0 + 1 + 1 = 10,写 0 进 1。第 5 列:1 + 1 + 1 = 11,写 1 进 1。

第 6 列:1 + 0 + 1 = 10,写 0 进 1。第 7 列:0 + 0 + 1 = 1,没有向外进位。

结果是 10100100。检查:128 + 32 + 4 = 164,吻合。第 7 列没有向外进位,所以没有溢出。

有溢出的示范例子

计算 11001000 加 01000110(8 位)。十进制是 200 + 70 = 270,超过 255,所以预期会溢出。

列76543210
进位(进入)10000000
第一个数11001000
第二个数01000110
结果00001110

第 6 列:1 + 1 = 10,写 0 进 1。第 7 列:1 + 0 + 1 = 10,写 0,并且从最左边那一列向外进 1。

8 位寄存器只保留 00001110,也就是 14。真正的答案需要九位:1 00001110 = 256 + 14 = 270。因此正确的说法是:结果溢出,因为 270 对 8 位来说太大(最大 255),存储的值 14 是错的。

要留意的错误

常见的失误是写下了数字,却忘记进位。

题目: 计算 00000111 加 00000001。

错误做法: 第 0 列:1 + 1 = 0,但没有写进位,于是第 1 列和第 2 列直接照抄。答案写成 00000110。

这个答案是 6,但 7 + 1 必须是 8。纠正方法是先写出进位那一行,用到一个进位就划掉一个。

第 0 列得 0 进 1,第 1 列 1 + 0 + 1 = 0 进 1,第 2 列 1 + 0 + 1 = 0 进 1,第 3 列 0 + 0 + 1 = 1。正确答案是 00001000。如果转回十进制发现数值不对,就是丢了一个进位。

自我检查

1. 计算 00011011 加 00000101。

查看答案

27 + 5 = 32。逐列做:进位从第 0 列一直传到第 4 列,结果是 00100000。检查:32。

2. 计算 10000001 加 10000001。会溢出吗?

查看答案

129 + 129 = 258,超过 255。第 0 列:1 + 1 = 0 进 1。第 7 列:1 + 1 = 0 向外进 1。存储的结果是 00000010,并带有向外的进位,所以会溢出。存储的 2 是错的,因为真正的答案是 258。

3. 180 + 76 在 8 位中会溢出吗?

查看答案

180 + 76 = 256,比最大值 255 多 1。会溢出:存储的 8 位会是 00000000。

接下来学什么

接着学解释字符编码,再学位深度,它解释了溢出背后的上限。所有内容都可以在综合练习里练习。

不少学生加法没错,却不会用文字解释溢出来拿分。老师可以在线上一对一 Computer Science 补习中和你一起练这样的表达。

常见问题

二进制数字相加的规则是什么?

0 + 0 = 0,0 + 1 = 1,1 + 1 = 10,意思是写 0,进 1。如果还有进位进来,1 + 1 + 1 = 11,意思是写 1,进 1。从右边开始,一次做一列。

什么是溢出(overflow)?

当加法的结果大到超出可用的位数时,就发生溢出。8 位的最大值是 255,所以结果为 256 或更大就需要第九位,而这一位并不存在,存储的答案就是错的。

怎样知道 8 位加法有没有溢出?

看最左边那一列。如果这一列相加产生了向外的进位,就有了第九位,结果已溢出。你也可以把两个数转成十进制检查:和大于 255 就会溢出。

溢出发生时计算机会怎样?

处理器只保留放得下的 8 位,所以存储的值是错的,它还可以标记溢出,让程序作出反应。考试题通常要求你指出结果对于可用的位数来说太大。

资料来源

  1. Cambridge IGCSE Computer Science 0478 课程大纲页面

更新于:

下一步

如果你的二进制加法大多正确,却总有一个进位消失,一对一的老师可以看着你在哪一列出错,并纠正背后的习惯。

一小时付费试听课,按所安排老师确认的收费,RM80 起。 其他费用、时间安排及后续课程,在试听课后由家长与老师直接确认。

补习由家长或监护人安排。用 WhatsApp 把这页发给他们,他们就可以替你咨询。

是家长或监护人?在这里咨询

已通过我们的服务帮助 9,000+ 名学生