Appearance
408 计算机组成原理
408
计算机组成原理
CO-02-02 定点数的编码(原码/反码/补码/移码)
一、定位信息
| 项目 | 内容 |
|---|---|
| 所属圈层 | 核心层 |
| 考点热度 | H级(高频重点) — 近5年真题中几乎每年必考,选择题和综合题均有出现,单次分值2–5分;常与"补码运算""溢出判断""IEEE 754"结合考查 |
| 前置知识回顾 | 需掌握二进制与十进制的互转(CO-02-01),理解二进制的位权概念 |
| 知识网络定位 | 本单元是补码加减运算(CO-02-03)和乘除运算(CO-02-04)的直接基础,也是理解IEEE 754浮点数(CO-02-05)中阶码编码方式的前提 |
二、知识点讲解
2.1 定点数的基本概念
定点数是指小数点位置固定的数。在计算机中,定点数有两种常见约定:
- 定点整数:小数点固定在最低位之后,如 ,表示整数
- 定点小数:小数点固定在符号位之后、最高数值位之前,如 ,表示 的纯小数
定点数的表示需要解决两个问题:符号如何编码(用什么方式表示正负号)和数值如何编码(用什么方式表示绝对值大小)。由此产生了四种编码方式。
2.2 原码表示
定义:最高位为符号位(0正1负),其余位为数值的绝对值。
定点整数原码( 位,含1位符号位):
定点小数原码( 位,含1位符号位):
示例(8位定点整数):
- (符号位0,数值位为25的二进制)
- (符号位1,数值位相同)
原码零的表示:有两种——,,这是原码的一个缺点。
2.3 反码表示
定义:正数的反码与原码相同;负数的反码是将原码的数值位逐位取反(0变1,1变0)。
定点整数反码( 位):
示例(8位定点整数):
- (同原码)
- :原码为 ,数值位取反
反码零的表示:同样有两种——,。
2.4 补码表示(最重要)
定义:正数的补码与原码相同;负数的补码 = 反码 + 1(在最低位加1)。
定点整数补码( 位):
定点小数补码( 位):
示例(8位定点整数):
- (同原码)
- :原码 → 反码 → 加1 →
补码零的表示唯一:,这是补码的重要优势。
补码的特殊值(8位整数):
- 能表示的最小负数为 ,其补码为 (注意: 没有对应的原码表示)
- 表示范围:,比原码多表示一个负数
补码的快速求法(从低位到高位找到第一个1,该位及其右边不变,左边所有位取反):
- :原码 ,从右往左第一个1在第0位(最右),该位右边无,左边取反 → ✓
2.5 移码表示
定义:移码 = 补码的符号位取反(即在补码基础上翻转最高位),或者直接用 来计算。
示例(8位定点整数,):
- :补码 ,符号位取反
- :补码 ,符号位取反
移码的核心特点:移码的大小可以直接反映真值的大小关系。移码越大,对应的真值越大。这使得移码非常适合用于浮点数的阶码(IEEE 754标准中阶码就用移码表示)。
移码零的表示唯一:(8位时)。
2.6 四种编码方式对比总结
| 特征 | 原码 | 反码 | 补码 | 移码 |
|---|---|---|---|---|
| 正数编码 | 同真值 | 同真值 | 同真值 | 符号位取反 |
| 负数编码 | 符号位1+绝对值 | 原码数值位取反 | 反码+1 | 补码符号位取反 |
| 零的表示 | 两种(+0,-0) | 两种(+0,-0) | 唯一 | 唯一 |
| 表示范围(8位) | -127 ~ +127 | -127 ~ +127 | -128 ~ +127 | -128 ~ +127 |
| 能否直接加减 | 不能(需判断符号) | 不能 | 能(硬件最简) | 能(但少见) |
| 主要用途 | 理解概念 | 过渡形式 | 计算机内部运算 | 浮点数阶码 |
| 与真值关系 | 符号+绝对值 | 符号+取反 | 模运算 | 线性映射 |
三、记忆与理解辅助
3.1 口诀与技巧
原码→反码→补码的转换口诀:
- "正数三码合一,负数逐级变换"
- 正数:原码 = 反码 = 补码
- 负数:原码 → 反码(数值位取反)→ 补码(反码+1)
补码求值的直觉法:
- 看到补码,先判断符号位:符号位为0就是正数(直接读);符号位为1是负数
- 负数补码求真值:再求一次补码("补码的补码是原码"),然后加负号
- 快速法:从最低位找到第一个1,该位及右边不变,左边取反,加负号
移码的记忆要点:
- "移码 = 补码翻符号"——最简单的记忆
- 移码越大真值越大——这是移码的核心价值
- 0的移码是 ——刚好在中间
补码多表示一个负数的理解:
- 原码中 和 占了两个编码,补码将 的编码"让"给了
- 8位补码: 不是 ,而是
3.2 对比表:8位定点整数的四种编码(关键对照表)
| 真值 | 原码 | 反码 | 补码 | 移码 |
|---|---|---|---|---|
| +127 | 01111111 | 01111111 | 01111111 | 11111111 |
| +1 | 00000001 | 00000001 | 00000001 | 10000001 |
| +0 | 00000000 | 00000000 | 00000000 | 10000000 |
| -0 | 10000000 | 11111111 | 00000000 | 10000000 |
| -1 | 10000001 | 11111110 | 11111111 | 01111111 |
| -127 | 11111111 | 10000000 | 10000001 | 00000001 |
| -128 | 无 | 无 | 10000000 | 00000000 |
3.3 真值与补码互转的快捷流程
真值 → 补码:
- 正数:直接转二进制,高位补0
- 负数:先求绝对值的二进制 → 按位取反 → 末位加1
补码 → 真值:
- 符号位为0:直接读数值
- 符号位为1:再求一次补码(取反+1),读出数值后加负号
四、例题与精解
例题1(基础巩固)
命题意图:考查四种编码方式之间的相互转换,验证对定义的理解。
题目:设机器字长为8位,分别用原码、反码、补码和移码表示十进制数 。
审题分析:
- 已知:真值 ,字长8位
- 求解:四种编码表示
- 关键:先求绝对值53的二进制,再按规则逐级转换
解题思路:
- 求53的二进制
- 正数编码规则:正数三码合一,移码符号取反
- 负数编码规则:原码符号置1→反码数值取反→补码+1→移码符号取反
完整步骤:
第一步:
第二步:原码(符号位1 + 绝对值)
第三步:反码(数值位取反)
第四步:补码(反码+1)
第五步:移码(补码符号位取反)
验证:从补码 反推真值
- 符号位为1,是负数
- 求补码的补码:取反 ,加1得
- 真值为 ✓
方法反思:
- 转换链条是单向的:原码 → 反码 → 补码 → 移码,每一步都是确定性的
- 正数的四种编码只需处理符号位,数值部分完全相同
- 验证环节不可省略,养成习惯
例题2(中等提升)
命题意图:考查已知补码求真值的能力,以及对补码表示范围的理解。
题目:已知某8位机器数的补码为 ,求其对应的十进制真值。若将该编码分别按原码和移码解读,结果是什么?
审题分析:
- 已知:8位补码
- 求解:①真值 ②原码解读 ③移码解读
- 关键:按不同编码的规则分别求值
解题思路:
- 补码→真值:判断符号,负数需要再求一次补码
- 原码解读:直接按原码规则(符号位+绝对值)
- 移码解读:移码 = 补码翻符号,所以补码翻符号后当补码读
完整步骤:
① 补码求真值:
- 符号位为1,是负数
- 求补码的补码:取反 ,加1得
- 真值 =
② 按原码解读:
- 符号位1表示负数,数值位
- 原码表示
③ 按移码解读:
- 移码的符号位取反得补码:
- 补码符号位为0,是正数,真值为
对比总结:同一二进制串 ,按不同编码解读:
| 编码方式 | 真值 |
|---|---|
| 补码 | |
| 原码 | |
| 移码 |
方法反思:
- 同一个二进制序列,按不同编码规则解读会得到完全不同的真值
- 解题时必须明确"这是什么编码",不能想当然
- 补码 是特殊值,等于 ,没有对应的原码表示
五、考情分析
| 分析维度 | 具体情况 |
|---|---|
| 近5年考查频次 | 几乎每年必考,选择题1–2道或作为综合题的一部分 |
| 常见题型 | 选择题(给真值求编码、给编码求真值)、综合题(与运算、溢出结合) |
| 分值占比 | 2–5分/次,若出现在综合题中分值更高 |
| 命题趋势 | 纯记忆性考查减少,更多与"补码加减运算""溢出判断""IEEE 754阶码"等实际应用结合考查;近年增加了"已知编码推断数据类型"的题型 |
注:考情数据基于大纲权重与通用命题规律推测,待真题分析子代理产出后校准。
六、易错点提醒
易错点1
- 错误表现:负数求补码时,直接在原码上加1,跳过反码步骤
- 错误原因:混淆了"反码+1"中的"反码"是数值位取反的结果,不是原码本身
- 正确做法:严格按三步走——原码 → 数值位取反得反码 → 反码末位加1得补码。或使用快速法:从最低位找到第一个1,该位及右边不变,左边取反
易错点2
- 错误表现:认为 可以用原码表示,或试图求 的原码
- 错误原因:8位原码的表示范围是 , 超出原码能表示的范围
- 正确做法: 只能用补码表示(),它没有对应的原码形式。考试中若问"的原码是什么",应回答"不存在"
易错点3
- 错误表现:求补码真值时忘记加负号,直接把补码当正数读
- 错误原因:看到补码数值位的二进制就直接当正数,忽略了符号位为1意味着是负数
- 正确做法:符号位为1时,必须对整个补码再求一次补码(取反+1),得出绝对值后加负号
易错点4
- 错误表现:混淆移码与补码的关系,认为移码是补码加1或减1
- 错误原因:将移码的定义与其他编码变换混淆
- 正确做法:移码 = 补码的符号位取反(翻转最高位),其余位不变。记住"翻符号"三个字即可
七、来源标注
- 依据2026考研统考大纲"计算机组成原理"第二章"数据的表示和运算"中"定点数的表示"相关内容
- 依据大学本科经典教材共识(唐朔飞《计算机组成原理》、白中英《计算机组成原理》、Patterson & Hennessy《计算机组成与设计》)
本知识单元为CO-02"数据的表示和运算"系列第2单元,下一单元将讲解补码加减运算与溢出判断。