Appearance
定点数编码的转换与书写
大纲定位
二(一)2 定点数的编码表示 · 二(三)整数的表示和运算
四种编码的定义、范围、零的表示在 真值与机器数:四种编码的定义。本篇只管动手:怎么转、怎么在卷面上写、同一串位怎么读出两个不同的数。
考情分析
408 的题型只有单项选择题和综合应用题两类。本考点是纯操作题,答对与否只取决于转换步骤有没有走错。
注意卷面形态:标答普遍用十六进制机器数书写(如
86H、FBH、E002H),而不是一长串二进制。只会写二进制、不会转十六进制,会在综合题上吃亏。
一、三向互转
要在三种形态之间自由切换:
真值 → 机器数
以
- 取绝对值转二进制:
,补足 7 位数值位 → 0000101 - 写原码:符号位 1 →
10000101 - 数值位取反 →
11111010(这是反码) - 末位加 1 →
11111011(补码) - 四位一组转十六进制:
1111 1011→ FBH
机器数 → 真值
符号位是 0 就直接读;是 1 则再求一次补(取反加 1)得到绝对值。
以 11001100 为例:符号位 1,是负数。数值位 1001100 取反得 0110011,加 1 得 0110100
十六进制 ↔ 二进制
四位一组,机械对应,不用算:
| Hex | Bin | Hex | Bin | Hex | Bin | Hex | Bin |
|---|---|---|---|---|---|---|---|
| 0 | 0000 | 4 | 0100 | 8 | 1000 | C | 1100 |
| 1 | 0001 | 5 | 0101 | 9 | 1001 | D | 1101 |
| 2 | 0010 | 6 | 0110 | A | 1010 | E | 1110 |
| 3 | 0011 | 7 | 0111 | B | 1011 | F | 1111 |
16 位数就是四个十六进制位,例如 short 型 1110 0000 0000 0010 → E002H。
几个背下来省时间的
| 真值(8 位) | 补码 | 十六进制 |
|---|---|---|
11111111 | FFH | |
10000000 | 80H | |
01111111 | 7FH |
推广:任意位数下
二、快速转换法
标准做法是"取反加 1",但有个更快的扫描法:
从最低位向左扫描,找到第一个 1;该位及其右侧全部保持不变,左侧的数值位逐位取反。
用它把补码 11001100 转回原码:
数值位
这条规则的输入是什么,必须看清
扫描法在原码 ↔ 补码之间双向可用(两个方向规则相同),但它不能用在反码上。
标准链条是「原码 —数值位取反→ 反码 —加 1→ 补码」,扫描法是把后两步合并了。如果你已经算出了反码,那就只差加 1,别再去扫描。
三、求相反数(变号)
已知
注意是"连符号位一起",这跟"由补码求原码"只动数值位不同。
| 全位取反加 1 | 真值对照 | ||
|---|---|---|---|
01001100( | → | 10110100 | |
11001100( | → | 00110100 | |
10000000( | → | 10000000 | 仍是 |
最后一行不是笔误
推广:任意位数下,最小负数
四、同一串位,两种读法
这是本篇最重要的一条,也是真题切入这个知识点时最常用的角度。
位模式不变,解释方式变。 一串 8 位 10000110:
| 怎么读 | 值 | 算法 |
|---|---|---|
| 按无符号数 | ||
| 按补码 | 最高位是符号位, |
两个值相差正好
卷面上怎么答
题目问"这个寄存器里装的是多少",先看它要求按什么类型解释。同一条 MOV 指令搬进来的位串,声明成 int 和 unsigned int 读出来是两个数,而寄存器里的电平一模一样。
比较大小时更要命:FFFDH 按 16 位补码是
转换流程速查
交互可视化
例题
例 1:某 8 位寄存器的内容为 86H。分别按无符号整数和补码整数解释,它的值各是多少?
86H = 1000 0110。
- 无符号:
- 补码:最高位为 1,
例 2:设 short 型变量
short 为 16 位。1110 0000 0000 0010,即 E002H。
也可以走快捷路径:1110 0000 0000 0001,加 1 得 1110 0000 0000 0010 ✓
例 3:已知 $[X]_补 = $ 10110100,求
- 求
:全位取反加 1 → 01001100= - 所以
反过来验证:$2^8 - 76 = 180 = $ 10110100 ✓
常见丢分点
- 求补时漏掉"+1"——只做了取反就当补码。这是本考点第一大错因
- 由补码求原码时动了符号位(符号位应保持为 1)
- 把补码位串当无符号数直接读,忘了最高位是符号位
- 求
时只取反数值位(应当连符号位一起) - 只写二进制不写十六进制,或四位一组时分组分错方向(应从最低位向高位每 4 位一组,高位不足补 0)
- 忘了交代位数,导致边界值答案不唯一
考点清单
- [ ] 真值 ↔ 二进制机器数 ↔ 十六进制机器数的三向互转
- [ ] 取反加 1 的标准流程,以及扫描法这一快捷方式(输入是原码或补码,不是反码)
- [ ] 求
:连符号位一起取反加 1 - [ ] 最小负数
无相反数,求补必溢出 - [ ] 同一位串按无符号与按补码读,最高位为 1 时相差
- [ ] 常用速记:
全 F、最小负数 8 后跟全 0 - [ ] 卷面用十六进制书写机器数
真题练习
相关真题(20题)
教材出处
- 模运算与补码定义、"取反加 1"的代数展开:袁春风《计算机组成与系统结构》第 3 版 §2.1.4 定点数的编码,印刷页 p29–p31
- 由
求 需连同符号位取反末位加 1:唐朔飞《计算机组成原理》第 3 版 §6.1,印刷页 p226