Skip to content
难度中等(★★)
建议时长75分钟
本课难点
  • 补码/移码的“人为定义”导致的最小值与0的唯一性
  • 定点整数与定点小数的范围公式(尤其是补码定点小数可取到-1)
  • 综合题:16进制转2进制后读补码,再根据题意还原真值

1.1.3 码制

本课核心知识点整理
本课核心知识点手绘流程图(SVG)

本节导学:码制是在解决“二进制如何表达正负并参与运算”

学十进制时,+7-7 的正负号可以直接写在数字前面;到了计算机内部,所有信息都必须落到固定长度的 0/1 序列里。码制这一节的核心不是背四个名词,而是看清一条技术演进线:

码制技术演进图

软考题通常不要求推导硬件电路,但会反复考三件事:给一个码能不能读出真值,给一个字长能不能算表示范围,给一个应用场景能不能判断为什么要用这种码。

1. 机器数、真值与符号位

人的数学表达叫真值,比如 +13-13。计算机里保存的固定二进制串叫机器数。机器数的最高位通常承担符号功能:0 表示正,1 表示负。

8 位机器数字段布局

这里要特别注意“数值相关位”这个说法。对原码来说,它就是绝对值;对反码、补码来说,它已经参与编码规则,不能再直接当作绝对值读。

2. 四种码制的技术取舍

码制正数规则负数规则主要优点为什么不够好或为什么被采用
原码符号位为 0,数值位写绝对值符号位为 1,数值位写绝对值直观,人与机器都容易读+0-0 重复;加减法不能直接统一到加法器
反码与原码相同符号位不变,数值位按位取反比原码更接近补码运算思想仍有 +0-0;加法出现最高进位时还要“回卷”处理
补码与原码相同反码加 1加法器可以统一处理加法和减法;0 唯一;编码数量用满人读负数不如原码直观,但硬件实现更划算,所以成为整数运算主流
移码真值整体加偏置,或在软考常见口径下“补码符号位取反”同左编码顺序更便于比较大小主要适合阶码、偏置指数等场景,不是整数加减运算的主力

这张表要按“为什么会替代”来记:原码输在运算,反码输在仍有两个 0,补码赢在硬件统一性,移码赢在比较便利性。

3. 用 -7 把转换链走一遍

8 位机器数中,+7 的二进制绝对值是 0000111。写成带符号的 8 位机器数时:

text
真值:-7

原码:10000111    最高位 1 表示负,其余位 0000111 表示绝对值 7
反码:11111000    符号位不动,数值位 0000111 逐位取反
补码:11111001    反码基础上加 1
移码:01111001    常见软考口径:补码符号位取反

正数在原码、反码、补码下形式相同,这是很多题的快捷入口。只有当最高位为 1 时,才需要根据题目指定的码制继续解释。

4. 为什么补码能把减法变成加法

计算机硬件里,加法器比“既会加又会减的复杂电路”更容易统一设计。补码的目标就是把:

text
A - B

转成:

text
A + (-B 的补码)

看一个 4 位例子,计算 1 + (-1)

text
+1 的补码:0001
-1 的补码:1111

  0001
+ 1111
------
1 0000

固定 4 位机器数只保留低 4 位,最高进位丢弃,结果就是 0000,也就是唯一的 0。这个设计带来两个结果:

  • 减法可以交给加法器完成。
  • 原来原码里的 -0 编码空间不再浪费,被用来表示最小负数。

所以 N 位补码整数的范围不是对称的,而是:

2N1x2N11

8 位补码能表示 -128+127,负数比正数多一个,就是因为 10000000 被定义为 -128

5. 三位二进制小表:看清“人为定义”

课程里强调“补码、移码有些值是人为定义的”,可以用 3 位编码快速看清。

编码原码真值反码真值补码真值移码真值(按补码符号位取反口径)
000+0+00-4
001+1+1+1-3
010+2+2+2-2
011+3+3+3-1
100-0-3-40
101-1-2-3+1
110-2-1-2+2
111-3-0-1+3

这张表背后的规律比表本身重要:

  • 原码、反码都有两个 0,因此可表示的不同真值只有 2N1 个。
  • 补码没有 -0,因此 2N 个编码全都对应不同真值。
  • 移码把有符号范围平移成更利于大小比较的编码序列,常用于浮点数阶码。

6. 表示范围:先数编码,再看 0 是否重复

设字长为 N 位,并且 N 位已经包含符号位。

定点整数

码制真值范围可表示的不同真值个数记忆抓手
原码(2N11)+(2N11)2N1最高位表符号,数值位最大全 1;两个 0 重复
反码(2N11)+(2N11)2N1和原码范围相同;两个 0 重复
补码2N1+(2N11)2N最小负数多一个;0 唯一
移码2N1+(2N11)2N与补码真值范围一致,编码顺序不同

定点小数

定点小数常默认小数点在符号位之后,例如:

text
符号位 . 数值位
  S   . b1 b2 b3 ... b(N-1)
码制真值范围
原码/反码(12(N1))+(12(N1))
补码/移码1+(12(N1))

整数和小数的范围最容易混。判断方法很简单:题目若说“定点整数”,小数点在最右边;题目若说“定点小数”或“尾数为纯小数”,小数点在符号位后面。

7. 读码题的标准步骤

进制转换和码制经常组合考。遇到十六进制机器数时,不要直接猜真值,按下面顺序做:

  1. 十六进制先转二进制,1 位十六进制对应 4 位二进制。
  2. 看题目说的是原码、反码、补码还是移码。
  3. 看最高位。最高位为 0 时,多数情况下直接按正数读。
  4. 最高位为 1 时,严格按对应码制还原。
  5. 最后再把二进制绝对值转回十进制。

补码负数还原常用口诀:

text
看符号位为 1 → 判断为负数
对整个补码取反加 1 → 得到绝对值
真值 = -绝对值

移码题要看题干口径:如果给了偏置值,就用“真值 = 移码值 - 偏置”;如果按软考常见的“补码符号位取反”,就先把符号位翻回来当补码读。

8. 本节考点地图

题型题干信号解题动作
转换题“求 -X 的原码/反码/补码/移码”先写绝对值,再按负数规则逐步转换
读码题“某机器数为 XXXX,采用补码表示”先判符号位,再按补码还原真值
范围题“字长 N 位,含符号位”先选整数/小数,再选码制公式
综合题“十六进制 + 补码/移码 + 真值”十六进制转二进制,再读码
概念题“哪种码适合运算/阶码比较”运算选补码,阶码比较常选移码

🧪 例题(按难度)

简单(3题)

单选
在有符号数表示中,哪类码制会出现“+0”和“-0”两种编码?

例题1(范围题)

单选
采用 N 位补码(含 1 位符号位)表示定点整数,可直接表示的真值范围是:
单选
8 位补码表示的定点整数中,最小负数对应的编码是:

中级(3题)

例题2(综合:进制 + 补码读码)

填空
若某 2X 的补码以十六进制给出为 90H(8位字长),求 X 的真值。

例题3(定点小数范围)

单选
9 位二进制定点小数(含 1 位符号位)用补码表示,则其真值范围是:
填空
将十进制 `-13` 表示为 8 位二进制补码(可用二进制或十六进制作答)。

困难(1题)

单选
在 8 位补码中计算:`0111 1111 + 0000 0001`。下列判断正确的是:

📚 本课小结

  • 原码/反码:直观但存在 +0/-0,运算不友好
  • 补码:计算机加减运算核心,范围更“满”(2N1 可取到)
  • 移码:常用于浮点阶码,便于大小比较
  • 高频考法:范围/个数 + 进制转换 + 读码(补码/移码)综合