💻 原码/反码/补码/移码 取值范围 考点详解)
本文针对计算机组成原理核心考点------定点数4类编码的取值范围做严谨纠错、原理拆解与应试优化,适配大学期末考、计算机考研408/自主命题考点,所有内容均符合计算机行业通用标准与统考命题规范。
🔑 核心前提定义(看懂公式的基础,必看)
所有取值范围的推导,均基于以下统一规则,避免概念混淆:
- 机器字长n :总位数固定为
n,其中最高1位为符号位 (0表示正数,1表示负数),剩余n-1位为数值位,小数点隐含存储,不占用bit位。 - 定点机分类规则 :
- 小数定点机(纯小数):约定小数点隐含在符号位与最高数值位之间,仅能表示(-1,1)区间的纯小数,无整数位。
- 整数定点机(纯整数):约定小数点隐含在最低数值位之后,仅能表示整数,无小数位。
- 编码通用规则 :正数的原码、反码、补码完全相同;仅负数的三类编码规则不同,这是取值范围差异的核心根源。
🎯 完整标准取值范围表(纠错优化版)
| 码制 | 小数定点机(纯小数) | 整数定点机(纯整数) | 补充说明 |
|---|---|---|---|
| 原码 | − ( 1 − 2 − ( n − 1 ) ) ∼ + ( 1 − 2 − ( n − 1 ) ) -(1-2^{-(n-1)}) \sim +(1-2^{-(n-1)}) −(1−2−(n−1))∼+(1−2−(n−1)) | − ( 2 n − 1 − 1 ) ∼ + ( 2 n − 1 − 1 ) -(2^{n-1}-1) \sim +(2^{n-1}-1) −(2n−1−1)∼+(2n−1−1) | 存在+0、-0两套编码,正负范围完全对称 |
| 反码 | − ( 1 − 2 − ( n − 1 ) ) ∼ + ( 1 − 2 − ( n − 1 ) ) -(1-2^{-(n-1)}) \sim +(1-2^{-(n-1)}) −(1−2−(n−1))∼+(1−2−(n−1)) | − ( 2 n − 1 − 1 ) ∼ + ( 2 n − 1 − 1 ) -(2^{n-1}-1) \sim +(2^{n-1}-1) −(2n−1−1)∼+(2n−1−1) | 存在+0、-0两套编码,正负范围完全对称 |
| 补码 | − 1 ∼ + ( 1 − 2 − ( n − 1 ) ) -1 \sim +(1-2^{-(n-1)}) −1∼+(1−2−(n−1)) | − 2 n − 1 ∼ + ( 2 n − 1 − 1 ) -2^{n-1} \sim +(2^{n-1}-1) −2n−1∼+(2n−1−1) | 0有唯一编码,负数范围比原码/反码多1个最小值 |
| 移码 | − 1 ∼ + ( 1 − 2 − ( n − 1 ) ) -1 \sim +(1-2^{-(n-1)}) −1∼+(1−2−(n−1))(理论推导值) | − 2 n − 1 ∼ + ( 2 n − 1 − 1 ) -2^{n-1} \sim +(2^{n-1}-1) −2n−1∼+(2n−1−1) | ❗ 工程中仅用于纯整数(浮点数阶码),几乎不用于小数表示 |
表格纠错说明
- 修正了原内容中「移码常规用于小数」的误导性表述:移码的核心应用场景是浮点数的阶码(纯整数),小数场景仅为理论推导,无实际工程应用。
- 补充了编码范围差异的核心根源注释,避免死记硬背。
- 统一了公式的符号规范,符合考研408命题的公式书写标准。
📜 各码制取值范围 原理详解(从编码规则推导范围)
1. 原码
编码规则
- 正数:符号位为0,数值位为真值的二进制绝对值
- 负数:符号位为1,数值位为真值的二进制绝对值
- 核心缺陷:0有两套编码:
+0=0.000...0/-0=1.000...0(小数)、+0=000...0/-0=100...0(整数),浪费了1个编码空间。
范围推导
- 小数定点机:n位字长下,最大正数为
0.111...1(n-1个1),对应十进制 1 − 2 − ( n − 1 ) 1-2^{-(n-1)} 1−2−(n−1);最小负数为1.111...1,对应十进制 − ( 1 − 2 − ( n − 1 ) ) -(1-2^{-(n-1)}) −(1−2−(n−1))。 - 整数定点机:最大正数为
0111...1(n-1个1),对应十进制 2 n − 1 − 1 2^{n-1}-1 2n−1−1;最小负数为1111...1,对应十进制 − ( 2 n − 1 − 1 ) -(2^{n-1}-1) −(2n−1−1)。
🔄 2. 反码
编码规则
- 正数:反码与原码、补码完全一致
- 负数:符号位固定为1,数值位按位取反
- 核心缺陷:和原码一致,0有两套编码:
+0=0.000...0/-0=1.111...1(小数)、+0=000...0/-0=111...1(整数),编码空间和原码完全对应。
范围推导
反码仅改变了负数的数值位编码方式,未改变编码空间的大小,因此取值范围和原码完全一致,无任何扩展。
⚙️ 3. 补码(现代计算机唯一用于数值运算的编码,核心考点)
编码规则
- 正数:补码与原码、反码完全一致
- 负数:补码 = 反码 + 1(最低位加1,符号位保持不变)
- 核心优势:0有唯一编码(全0) ,原码/反码中表示
-0的编码被重新利用,用于表示一个更小的负数,因此负数范围得到扩展。
范围推导
- 小数定点机:
最大正数和原码一致,为 + ( 1 − 2 − ( n − 1 ) ) +(1-2^{-(n-1)}) +(1−2−(n−1));
原码中表示-0的编码1.000...0,被重新定义为**-1**(原码/反码无法表示该值),因此最小负数为-1,范围为 − 1 ∼ + ( 1 − 2 − ( n − 1 ) ) -1 \sim +(1-2^{-(n-1)}) −1∼+(1−2−(n−1))。 - 整数定点机:
最大正数和原码一致,为 + ( 2 n − 1 − 1 ) +(2^{n-1}-1) +(2n−1−1);
原码中表示-0的编码1000...0,被重新定义为** − 2 n − 1 -2^{n-1} −2n−1**(原码/反码无法表示该值),因此最小负数为 − 2 n − 1 -2^{n-1} −2n−1,范围为 − 2 n − 1 ∼ + ( 2 n − 1 − 1 ) -2^{n-1} \sim +(2^{n-1}-1) −2n−1∼+(2n−1−1)。
📏 4. 移码
编码规则
标准移码的核心公式: [ x ] 移 = 2 n − 1 + x [x]_{移} = 2^{n-1} + x [x]移=2n−1+x(整数场景,偏移量固定为 2 n − 1 2^{n-1} 2n−1),本质是补码的符号位取反,数值位完全不变。
- 核心优势:移码的编码大小顺序和真值的大小顺序完全一致,可直接用无符号数比较电路判断大小,因此专门用于浮点数的阶码(纯整数),简化硬件设计。
范围推导
移码仅改变了补码的符号位,未改变编码空间和数值位,因此取值范围和补码完全一致。
- 整数场景(工程常用): − 2 n − 1 ∼ + ( 2 n − 1 − 1 ) -2^{n-1} \sim +(2^{n-1}-1) −2n−1∼+(2n−1−1)
- 小数场景(仅理论推导):偏移量为1,公式为 [ x ] 移 = 1 + x [x]_{移}=1+x [x]移=1+x,范围为 − 1 ∼ + ( 1 − 2 − ( n − 1 ) ) -1 \sim +(1-2^{-(n-1)}) −1∼+(1−2−(n−1)),无实际工程应用。
📊 实例验证(最常用8位机器字长,n=8)
以考试最常考的**8位字长(1位符号位+7位数值位)**为例,对应公式验证取值范围,直观易懂:
| 码制 | 小数定点机(8位) | 整数定点机(8位) |
|---|---|---|
| 原码 | − 127 / 128 ∼ + 127 / 128 -127/128 \sim +127/128 −127/128∼+127/128( − 0.9921875 ∼ + 0.9921875 -0.9921875 \sim +0.9921875 −0.9921875∼+0.9921875) | − 127 ∼ + 127 -127 \sim +127 −127∼+127 |
| 反码 | − 127 / 128 ∼ + 127 / 128 -127/128 \sim +127/128 −127/128∼+127/128 | − 127 ∼ + 127 -127 \sim +127 −127∼+127 |
| 补码 | − 1 ∼ + 127 / 128 -1 \sim +127/128 −1∼+127/128 | − 128 ∼ + 127 -128 \sim +127 −128∼+127 |
| 移码 | − 1 ∼ + 127 / 128 -1 \sim +127/128 −1∼+127/128(理论值) | − 128 ∼ + 127 -128 \sim +127 −128∼+127 |
公式对应验证:n=8时, 2 − ( n − 1 ) = 2 − 7 = 1 / 128 2^{-(n-1)}=2^{-7}=1/128 2−(n−1)=2−7=1/128, 2 n − 1 = 2 7 = 128 2^{n-1}=2^7=128 2n−1=27=128,和实例完全匹配。
⚠️ 高频考点&易错点纠错(期末/考研必看)
1. 核心考点
- 补码的取值范围比原码/反码多1个负数,是选择题最高频考点。
- 8位整数补码的最小值为-128,最大值为+127,是命题的高频数值案例。
- 移码和补码的取值范围完全一致,仅符号位相反。
2. 高频易错点纠错
| 易错点 | 错误表述 | 正确结论 |
|---|---|---|
| 机器字长定义 | 公式中的n是数值位的位数 | n是包含符号位的总机器字长,数值位位数为n-1 |
| 补码-1的表示 | 8位小数原码1.0000000表示-1 | 1.0000000在原码/反码中是-0,仅在补码中表示-1 |
| 移码的应用 | 移码常用于小数表示 | 移码仅用于浮点数的整数阶码,工程中从不用于小数 |
| 反码的范围 | 反码的负数范围比原码大 | 反码和原码的取值范围完全一致,无任何扩展 |
| 补码的0 | 补码有+0和-0两个编码 | 补码的0有唯一全0编码,这是它能扩展负数范围的核心原因 |
🎵 应试速记口诀
- 原反对称,补码多负:原码反码正负范围完全对称,补码负数多一个最小值。
- 小数补码负一,整数补码负二的n-1:小数补码最小是-1,整数补码最小是 − 2 n − 1 -2^{n-1} −2n−1。
- 移码补码范围同,只是符号位反冲:移码取值范围和补码完全一致,仅符号位取反。
🗺️ 配套Mermaid思维导图(考点梳理)
定点数编码取值范围
核心前提
机器字长n
1位符号位+n-1位数值位
小数定点机
小数点在符号位后
整数定点机
小数点在数值位后
4类编码范围
原码
小数范围
整数范围
特点:±0两套编码,范围对称
反码
范围与原码一致
特点:±0两套编码,范围对称
补码
小数范围
整数范围
特点:0唯一编码,负数范围扩展
移码
范围与补码一致
特点:仅用于整数阶码,符号位取反
考点与易错点
高频考点:补码范围扩展
易错点1:机器字长n的定义
易错点2:移码的应用场景
易错点3:补码-0的复用
实例验证
8位整数补码:-128~+127
8位小数补码:-1~+127/128