Appearance
真值与机器数
考情分析
原码/反码/补码/移码是整个数据表示章节的基础。选择题几乎每年必考:给定机器码求真值,或给定真值求各种机器码,尤其是边界值(最大/最小值)和 0 的特殊表示。
真值与机器数
真值:带正负号的实际数值,如
机器数:在计算机中用 0/1 编码表示的数,符号位也被编码进去。
机器数的四种表示方式:原码、反码、补码、移码。
原码
符号位:正数为 0,负数为 1;数值位保持真值的绝对值不变。
其中
例(8 位):
| 真值 | 原码 |
|---|---|
00000000 | |
10000000 | |
01111111 | |
11111111 | |
10000001 |
原码的 0 有两种表示(
表示范围(
反码
正数的反码与原码相同;负数的反码是原码数值位按位取反。
例(8 位):
| 真值 | 原码 | 反码 |
|---|---|---|
00000000 | 00000000 | |
10000000 | 11111111 | |
01111111 | 01111111 | |
11111111 | 10000000 | |
10000001 | 11111110 |
反码的 0 同样有两种表示。反码现在很少单独使用,主要作为求补码的中间步骤。
补码
正数的补码与原码相同;负数的补码是反码加 1(等价于:原码数值位取反后末位加 1)。
例(8 位):
| 真值 | 原码 | 补码 |
|---|---|---|
00000000 | 00000000 | |
10000000 | 00000000 | |
01111111 | 01111111 | |
| 无法表示 | 10000000 | |
10000001 | 11111111 | |
11111111 | 10000001 |
补码中 0 的表示唯一,且比原码多表示一个最小负数
表示范围(
补码 → 真值(求原码)
- 符号位为 0:真值 = 补码本身
- 符号位为 1:数值位取反加 1,得到原码数值位,符号为负
例:补码 10110101
数值位 0110101 取反 → 1001010,加 1 → 1001011
真值 =
快速记忆
的补码:全 1( 11111111)的补码(8位): 10000000是补码能表示的最小负数,无对应原码
移码
移码主要用于表示浮点数的阶码(指数部分)。
即在真值的基础上加上偏置量
例(8位移码,偏置量
| 真值 | 补码 | 移码 |
|---|---|---|
00000000 | 10000000 | |
00000000 | 10000000 | |
01111111 | 11111111 | |
10000000 | 00000000 | |
11111111 | 01111111 |
移码中真值 0 的表示唯一,且便于比较大小(移码的数值大小与真值大小顺序一致)。
移码与 IEEE 754
IEEE 754 浮点数的阶码使用的是偏置码,偏置量不是
四种编码对比
| 编码 | 正数 | 负数 | 0 的唯一性 | 表示范围(n 位) |
|---|---|---|---|---|
| 原码 | 符号位 0 + 绝对值 | 符号位 1 + 绝对值 | 否(+0/-0) | |
| 反码 | 同原码 | 数值位取反 | 否 | |
| 补码 | 同原码 | 反码+1 | 是 | |
| 移码 | 补码符号位取反 | — | 是 |
典型例题
例题 1:设机器字长 8 位(含 1 位符号位),写出真值
00101101
- 原码:
10101101 - 反码:
11010010(数值位取反) - 补码:
11010011(反码加 1)
例题 2:已知某补码为 11001100,求其真值。
符号位为 1,数值位取反加 1:0110011 + 1 = 0110100 = 52
真值 =
例题 3:8 位补码所能表示的最小负数是多少?
10000000。
考点清单
- [ ] 原码、反码、补码、移码的定义和转换规则
- [ ] 正负零的各种编码表示,补码中 0 唯一
- [ ] 补码比原码多表示一个最小负数
- [ ]
位补码的表示范围: - [ ] 已知补码求真值的方法(数值位取反加 1)
- [ ] 移码 = 补码符号位取反,主要用于阶码