文档

主题 1 · 数据表示

二进制加法、溢出、移位与负数

8 位二进制加法,识别溢出,用逻辑移位做乘除法,以及用补码存储负数。

第 2 课,共 4 课大纲 1.1更新于 2026年10月31日

二进制加法

二进制加法和十进制竖式加法一样,只是一列满 2 就进位,而不是满 10。只有四条规则:

  • 0 + 0 = 0
  • 0 + 1 = 1
  • 1 + 1 = 0,进 1
  • 1 + 1 + 1 = 1,进 1
109 + 59 = 168
1286432168421
进位1111111
10901101101
5900111011
16810101000
从右往左算。把每个进位写在下一列的上方,就不会漏掉。

溢出

8 位寄存器最多只能存 255。如果加法结果更大,最左边的进位就会掉出去,因为没有第 9 位来存它。这就是溢出错误。

例如 200 + 100 = 300,需要 9 位(100101100)。寄存器只保留右边的 8 位 00101100,也就是 44,结果错了。

考试提示: 题目要求指出溢出时,要说明结果超出了寄存器能存的范围(8 位时大于 255),所以最后的进位丢失了。

逻辑移位

逻辑移位把每一位向左或向右移动若干位。空出来的位置补 0,被推出末端的位丢失。

每左移一位乘以 2,每右移一位除以 2。左移 3 位就是乘以 8。

按下按钮来移动 00010110(22)。左移两次得到 88。继续移,看看有 1 掉出去时会发生什么。

移位探索器可交互
128
64
32
16
8
4
2
1
十进制 22
16 + 4 + 2 = 22
如果左边丢掉一个 1,结果就错了(溢出)。如果右边丢掉一个 1,结果会被向下取整。

补码(二进制补码)

为了存储负数,补码让最左边一位的位值变成 −128,而不是 +128,其他位仍然是正的。所以以 1 开头的数是负数,以 0 开头的数是正数。

8 位补码可以存储 −128 到 +127。

补码探索器可交互
-128
64
32
16
8
4
2
1
十进制 -45
-128 + 64 + 16 + 2 + 1 = -45
11010011 = −128 + 64 + 16 + 2 + 1 = −45。翻转最左边一位,看看符号如何改变。

把一个数变成负数

把一个负的十进制数写成补码:

  1. 1
    写出正数
    45 → 00101101
  2. 2
    每一位取反
    00101101 → 11010010
  3. 3
    加 1
    11010010 + 1 → 11010011

考试提示: 检查答案:最左一位按 −128 计算,把位值加起来,应该得到你开始的那个数。

关键术语

溢出
结果太大,可用的位数存不下。
逻辑移位
把所有位向左或向右移动,空位补 0。
最高有效位
最左边的一位,位值最大。
补码
一种存储负整数的方式,最高有效位的位值为负。

自我检测

计算 01010101 + 00110011。查看答案

85 + 51 = 136 → 10001000,没有溢出。

00001101 逻辑左移 2 位后是什么?数值发生了什么变化?查看答案

00110100 = 52,乘以了 4(13 × 4)。

把 −20 转换成 8 位补码。查看答案

20 = 00010100,取反 → 11101011,加 1 → 11101100。

补码 10000001 的十进制值是多少?查看答案

−128 + 1 = −127。