| 描述 | |
|---|---|
| 特点 | ① 符号数字化。最高位为符号位,正数为 0,负数为 1 |
| ② 数的大小受机器字长的限制。机器字长一般是字节的整数倍,1字节(Byte)= 字长 8 位(bit) | |
| 举例 | ① 十进制数 +3 的机器数就是:0000 0011 |
| ② 十进制数 -3 的机器数就是:1000 0011 |
注:假设机器字长为 8 位,以下同
| 描述 | |
|---|---|
| 举例 | ① 机器数 0000 0011 的真值 = +000 0011 = +3 |
| ② 机器数 1000 0011 的真值 = -000 0011 = -3 而不是形式值 131(1000 0011 转成 十进制 就是 131) |
| 原码 | 描述 |
|---|---|
| 规则 | 最高位 表示符号位,其余位表示 数值位(同 机器数) |
| 优点 | 简单直观,便于人类理解 |
| 缺点 | 符号位 不能参与运算,需要设计复杂的硬件电路才能处理,贵! (用补码替代: 补码 的符号位可以参与运算) |

注:计算机一般不做减法(电路设计复杂,价格高),常用加法替代
如:A - B = A + (-B)
| 反码 | 描述 |
|---|---|
| 规则 | 正数:等于 原码 负数:在 原码 的基础上,符号位 不变,其余 按位取反(0变1,1变0) |
| 作用 | 表示中间状态,方便 原码 和 补码 之间进行转换 |

| 补码 | 描述 |
|---|---|
| 规则 | 正数:等于 原码 负数:在 反码 的基础上 + 1 |
| 说明 | 计算机中数据均已 补码 的形式进行运算 |


| 移码 | 描述 |
|---|---|
| 规则 | 无论正负,将 补码 的 符号位按位取反,数值位不变 |
| 说明 | 表示 浮点数 中的 阶码 (IEEE 754 标准) |

| 编码 | 定点整数 | 定点小数 | ||||
|---|---|---|---|---|---|---|
| 最小值 | 最大值 | 数值个数 | 最小值 | 最大值 | 数值个数 | |
| 原码 | -(2n-1 - 1) | 2n-1 - 1 | 2n-1 | -(1 - 2-(n-1)) | 1 - 2-(n-1) | 2n-1 |
| 反码 | ||||||
| 补码 | -2n-1 | 2n | -1 | 2n | ||
| 移码 | - | - | - | |||
说明:
① 原码 和 反码 一样,存在 ± 0 \pm0 ±0 的情况 +0=0000 0000,-0=1000 0000
② 补码 和 移码 一样,+0=0000 0000,-128=1000 0000= − 2 7 -2^7 −27(特殊规定,记住)
③ 补码 可表示的数值位数 比 原码、反码 多 1,就在于 ± 0 \pm 0 ±0 上
④ 上述 n 表示机器字长
⑤ 移码 只能用于表示定点整数
| 编码 | 定点整数 | 定点小数 | |||||||
|---|---|---|---|---|---|---|---|---|---|
| 负数 | 0 | 正数 | 负数 | 正数 | |||||
| 最小值 | 最大值 | 取值 | 最小值 | 最大值 | 最小值 | 最大值 | 最小值 | 最大值 | |
| 原码 | 1111 1111 = -(2 7-1) | 1000 0001 = -1 | 1000 0000 = -0 0000 0000 = +0 | 0000 0001 = 1 | 0111 1111 = 2 7-1 | 1.111 1111 = -(1-2-7) | 1.000 0001 = -2-7 | 0.000 0001 = 2-7 | 0.111 1111 = 1 - 2-7 |
| 补码 | 1000 0000 = -2 7 | 1111 1111 = -1 | 0000 0000 = +0 = 0 | 0000 0001 = 1 | 0111 1111 = 2 7-1 | 1.000 0000 = -1 | 1.111 1111 = -2 -7 | 0.000 0001 = 2-7 | 0.111 1111 = 1 - 2-7 |
红色字体为特殊规定,记住即可
【例题1】机器字长为 n 位的二进制数可以用补码来表示()个不同的有符号定点小数
A.
2
n
2^n
2n
B.
2
n
−
1
2^{n-1}
2n−1
C.
2
n
−
1
2^n - 1
2n−1
D.
2
n
−
1
+
1
2^{n-1} + 1
2n−1+1
参考答案:A
补码没有 ± 0 \pm 0 ±0 之分
【例题2】采用 n 位补码(包含一个符号位)表示数据,可以直接表示数值()
A.
2
n
2^n
2n
B.
−
2
n
-2^n
−2n
C.
2
n
−
1
2^{n-1}
2n−1
D.
−
2
n
−
1
-2^{n-1}
−2n−1
参考答案:D
补码的取值范围:[ − 2 n − 1 , 2 n − 1 − 1 -2^{n-1},2^{n-1}-1 −2n−1,2n−1−1]
【例题3】计算机中长采用原码、反码、补码和移码表示数据,其中,
±
0
\pm 0
±0 编码相同的是()
A.原码和补码
B.反码和补码
C.补码和移码
D.原码和移码
参考答案:C
原码 和 补码 中:+0 = 0000 0000,-0 = 1000 0000
补码 和 移码 中:+0 = 0000 0000,-0 => -128 = 1000 0000 (没有 -0,但有 -128,特殊规定,记住即可)
【例题4】若某整数的 16 位补码为
F
F
F
F
H
FFFF_H
FFFFH(H表示十六进制),则该数的十进制数为()
A.0
B.-1
C.
2
16
−
1
2^{16} - 1
216−1
D.
−
2
16
+
1
-2^{16} + 1
−216+1
参考答案:B
[ F F F F H ] 补 [FFFF_H]补 [FFFFH]补 = [ 10...01 ] 原 = − 1 [10...01]原= -1 [10...01]原=−1