精简版 · 小杯2026-08 冻结,已停止更新(发布前修订了 4 处已知错误)。后续勘误与新增内容只在正式版。看正式版(中杯)→
Skip to content

定点数编码的转换与书写

大纲定位

二(一)2 定点数的编码表示 · 二(三)整数的表示和运算

四种编码的定义、范围、零的表示真值与机器数:四种编码的定义。本篇只管动手:怎么转、怎么在卷面上写、同一串位怎么读出两个不同的数。

考情分析

408 的题型只有单项选择题综合应用题两类。本考点是纯操作题,答对与否只取决于转换步骤有没有走错。

注意卷面形态:标答普遍用十六进制机器数书写(如 86HFBHE002H),而不是一长串二进制。只会写二进制、不会转十六进制,会在综合题上吃亏。

一、三向互转

要在三种形态之间自由切换:

真值 (5)二进制机器数 (11111011)十六进制机器数 (FBH)

真值 → 机器数

5、8 位补码为例:

  1. 取绝对值转二进制:|5|=5=(101)2,补足 7 位数值位 → 0000101
  2. 写原码:符号位 1 → 10000101
  3. 数值位取反 → 11111010(这是反码)
  4. 末位加 1 → 11111011(补码)
  5. 四位一组转十六进制1111 1011FBH

机器数 → 真值

符号位是 0 就直接读;是 1 则再求一次补(取反加 1)得到绝对值。

11001100 为例:符号位 1,是负数。数值位 1001100 取反得 0110011,加 1 得 0110100 =52。所以真值 =52。十六进制写作 CCH

十六进制 ↔ 二进制

四位一组,机械对应,不用算:

HexBinHexBinHexBinHexBin
000004010081000C1100
100015010191001D1101
2001060110A1010E1110
3001170111B1011F1111

16 位数就是四个十六进制位,例如 short 型 8190:$2^{16} - 8190 = 57346 = $ 1110 0000 0000 0010E002H

几个背下来省时间的

真值(8 位)补码十六进制
111111111FFH
1281000000080H
+127011111117FH

推广:任意位数下 1 的补码都是全 F(FFH / FFFFH / FFFFFFFFH),最小负数都是 8 后面跟全 0(80H / 8000H / 80000000H)。

二、快速转换法

标准做法是"取反加 1",但有个更快的扫描法:

从最低位向左扫描,找到第一个 1;该位及其右侧全部保持不变,左侧的数值位逐位取反。

用它把补码 11001100 转回原码:

1|100取反1第一个 1100不变1|0110100

数值位 0110100=52,真值 52。与上面取反加 1 的结果一致。

这条规则的输入是什么,必须看清

扫描法在原码 ↔ 补码之间双向可用(两个方向规则相同),但它不能用在反码上

标准链条是「原码 —数值位取反→ 反码 —加 1→ 补码」,扫描法是把后两步合并了。如果你已经算出了反码,那就只差加 1,别再去扫描。

三、求相反数(变号)

已知 [X][X]连同符号位在内,全部位取反,末位加 1。

注意是"连符号位一起",这跟"由补码求原码"只动数值位不同。

[X]全位取反加 1[X]真值对照
01001100+761011010076
110011005200110100+52
1000000012810000000仍是 128

最后一行不是笔误

128 求相反数得到的还是它自己——因为 +128 根本无法用 8 位补码表示(范围上界是 +127)。这一步在硬件上会置溢出标志

推广:任意位数下,最小负数 2n1 没有相反数。求补运算遇到它必然溢出。

四、同一串位,两种读法

这是本篇最重要的一条,也是真题切入这个知识点时最常用的角度。

位模式不变,解释方式变。 一串 8 位 10000110

怎么读算法
无符号数134128+4+2=134,最高位就是数值位
补码122最高位是符号位,134256=122

两个值相差正好 28=256。这不是巧合——对于最高位为 1 的位串,

补码值=无符号值2n

卷面上怎么答

题目问"这个寄存器里装的是多少",先看它要求按什么类型解释。同一条 MOV 指令搬进来的位串,声明成 intunsigned int 读出来是两个数,而寄存器里的电平一模一样。

比较大小时更要命:FFFDH 按 16 位补码是 3、按无符号是 65533,两种解释下的大小关系完全相反。

转换流程速查

交互可视化

加载可视化中...

例题

例 1:某 8 位寄存器的内容为 86H。分别按无符号整数和补码整数解释,它的值各是多少?

86H = 1000 0110

  • 无符号:134
  • 补码:最高位为 1,134256=122

例 2:设 short 型变量 x=8190,写出 x 的机器数(十六进制)。

short 为 16 位。2168190=57346,转二进制 1110 0000 0000 0010,即 E002H

也可以走快捷路径:8190=(0001111111111110)2,全位取反得 1110 0000 0000 0001,加 1 得 1110 0000 0000 0010

例 3:已知 $[X]_补 = $ 10110100,求 [X]X 的真值。

  • [X]:全位取反加 1 → 01001100 = +76
  • 所以 X=76

反过来验证:$2^8 - 76 = 180 = $ 10110100

常见丢分点

  • 求补时漏掉"+1"——只做了取反就当补码。这是本考点第一大错因
  • 由补码求原码时动了符号位(符号位应保持为 1)
  • 把补码位串当无符号数直接读,忘了最高位是符号位
  • [X]只取反数值位(应当连符号位一起)
  • 只写二进制不写十六进制,或四位一组时分组分错方向(应从最低位向高位每 4 位一组,高位不足补 0)
  • 忘了交代位数,导致边界值答案不唯一

考点清单

  • [ ] 真值 ↔ 二进制机器数 ↔ 十六进制机器数的三向互转
  • [ ] 取反加 1 的标准流程,以及扫描法这一快捷方式(输入是原码或补码,不是反码)
  • [ ] 求 [X]连符号位一起取反加 1
  • [ ] 最小负数 2n1 无相反数,求补必溢出
  • [ ] 同一位串按无符号与按补码读,最高位为 1 时相差 2n
  • [ ] 常用速记:1 全 F、最小负数 8 后跟全 0
  • [ ] 卷面用十六进制书写机器数

真题练习

教材出处

  • 模运算与补码定义、"取反加 1"的代数展开:袁春风《计算机组成与系统结构》第 3 版 §2.1.4 定点数的编码,印刷页 p29–p31
  • [Y][Y] 需连同符号位取反末位加 1:唐朔飞《计算机组成原理》第 3 版 §6.1,印刷页 p226