1.1.3 码制
📝 学习目标
- 理解“符号位 + 数值位”的编码思想
- 掌握原码/反码/补码/移码的转换规则
- 熟练计算“字长为 N(含符号位)”时的表示范围与可表示个数
- 能处理“进制转换 + 读码(补码/移码)”的综合真题
🎯 知识点速记
1) 四种常考码制(软设上午题高频)
| 码制 | 正数 | 负数 | 典型用途 | 关键现象 |
|---|---|---|---|---|
| 原码 | 符号位0,数值位=绝对值 | 符号位1,数值位=绝对值 | 表示/存储直观 | 存在“+0/-0”两种编码;不适合直接运算 |
| 反码 | 与原码相同 | 符号位不变,数值位按位取反 | 过渡码 | 仍有“+0/-0”,加法会出现“回卷进位”问题 |
| 补码 | 与原码相同 | 反码 + 1(只对数值位加1) | 加减运算的主力 | 人为定义:用原来“-0”的编码表示最小负数,0只有一种编码 |
| 移码(偏置码) | 统一“加偏置”后存 | 统一“加偏置”后存 | 浮点数阶码(指数)常用 | 可把有符号数映射为无符号序列,便于比较 |
2) 常用“读码”口诀
- 补码转真值(负数):
- 看符号位=1 → 负数
- 数值位“按位取反 + 1”得到绝对值
- 真值 = -绝对值
- 移码转真值:真值 = 移码值 - 偏置(bias)
课堂强调:补码/移码有“人为定义”的特殊点(尤其是最小值、+0/-0),是软设高频坑。
🧠 难点与易错点
难点1:为什么补码能正确做加减
原码/反码的“+0/-0”会导致运算出现多余表示;补码把“-0”那组编码“借用”来表示最小负数,保证:
- 0只有一种编码
- 加法电路统一处理(溢出丢弃最高进位)
难点2:表示范围(定点整数 vs 定点小数)
题干若不特别说明:
- 定点整数:小数点在最右(纯整数)
- 定点小数:小数点在符号位之后(纯小数,绝对值 < 1)
易错点:不要把“立即数寻址”的“立即数”误当成“原码/补码的立即数”
“立即数”是寻址方式里的概念;码制题先判断“给的是哪种码”。
🔑 关键词解释
- 字长 N:一个数据占用的二进制位数(题干给 N 时通常“含符号位”)。
- 符号位:最高位,0 表示正,1 表示负(常规约定)。
- 定点整数/定点小数:小数点位置固定但不占位。
- 人为定义:补码/移码用某个“原本重复/无意义的编码”去表示最小负值,使编码更“满”。
🔍 表示范围与编码个数(必背表)
设字长为 N 位(含1位符号位)。
A) 定点整数
| 码制 | 可表示范围(真值) | 可表示个数 |
|---|---|---|
| 原码/反码 | -(2(N-1)-1) ~ +(2(N-1)-1) | 2N - 1(+0/-0重复) |
| 补码/移码 | -2(N-1) ~ +(2(N-1)-1) | 2N |
B) 定点小数(纯小数)
题干如果说“尾数是定点小数”,常用这个范围。
| 码制 | 可表示范围(真值) |
|---|---|
| 原码/反码 | -(1 - 2-(N-1)) ~ +(1 - 2-(N-1)) |
| 补码/移码 | -1 ~ +(1 - 2-(N-1)) |
🧩 联想扩展(常和码制一起考)
- 进制转换 + 读码:先把十六进制转二进制(4位一组),再按补码/移码规则读真值。
- 浮点数:阶码常用移码(方便比较大小),尾数常用补码(方便运算)。
- 溢出:补码加法丢弃最高进位;真正是否溢出要看符号变化规则(同号相加异号则溢出)。
🧪 例题(按难度)
简单(3题)
在有符号数表示中,哪类码制会出现“+0”和“-0”两种编码?
例题1(范围题)
采用 N 位补码(含 1 位符号位)表示定点整数,可直接表示的真值范围是:
8 位补码表示的定点整数中,最小负数对应的编码是:
中级(3题)
例题2(综合:进制 + 补码读码,课堂真题风格)
若某 2X 的补码以十六进制给出为 90H(8位字长),求 X 的真值。
例题3(定点小数范围)
9 位二进制定点小数(含 1 位符号位)用补码表示,则其真值范围是:
将十进制 `-13` 表示为 8 位二进制补码(可用二进制或十六进制作答)。
困难(1题)
在 8 位补码中计算:`0111 1111 + 0000 0001`。下列判断正确的是:
📚 本课小结
- 原码/反码:直观但存在 +0/-0,运算不友好
- 补码:计算机加减运算核心,范围更“满”(-2(N-1) 可取到)
- 移码:常用于浮点阶码,便于大小比较
- 高频考法:范围/个数 + 进制转换 + 读码(补码/移码)综合