Appearance
浮点数表示(IEEE 754)
考情分析
IEEE 754 是数据表示章节的核心高频考点,几乎每年必考。常见题型:给定十六进制浮点数求真值、给定真值求 IEEE 754 编码、特殊值识别(
、 、NaN),以及规格化数与非规格化数的区分。
浮点数的一般格式
:符号位(0 正 1 负) :阶码(指数),决定表示范围 :尾数(有效数字),决定表示精度
阶码位数越多,范围越大;尾数位数越多,精度越高。两者在总位数固定时此消彼长。
IEEE 754 标准格式
单精度 float(32 位)
| 字段 | 位数 | 位置 |
|---|---|---|
| 符号 | 1 | [31] |
| 阶码 | 8 | [30:23] |
| 尾数 | 23 | [22:0] |
偏置值
双精度 double(64 位)
| 字段 | 位数 | 位置 |
|---|---|---|
| 符号 | 1 | [63] |
| 阶码 | 11 | [62:52] |
| 尾数 | 52 | [51:0] |
偏置值
参数对比
| 参数 | 单精度 | 双精度 |
|---|---|---|
| 总位数 | 32 | 64 |
| 阶码位数 | 8 | 11 |
| 尾数位数 | 23 | 52 |
| 偏置值 | ||
| 最大正规数 | ||
| 最小正规数 | ||
| 有效位数 | 24 位(含隐含 1) | 53 位(含隐含 1) |
规格化数
规格化数尾数形式为
阶码范围:
特殊值
| 阶码 | 尾数 | 含义 | 说明 |
|---|---|---|---|
| 全 0 | 正零和负零,比较时视为相等 | ||
| 全 0 | 非规格化数 | 极小值,渐进下溢 | |
| 全 1 | 如 | ||
| 全 1 | NaN | 如 | |
| 其他 | 任意 | 规格化数 | 正常浮点数 |
非规格化数
当阶码全 0 且尾数不为 0 时:
- 没有隐含的 1,隐含前缀为 0
- 真实指数固定为
(单精度为 ,不是 ) - 作用:填补 0 到最小规格化数之间的空隙
为什么用偏置码表示阶码
阶码使用移码(偏置码)而非补码,有两个好处:
- 浮点数大小比较可以直接按无符号整数位模式比较
- 全 0 阶码对应最小指数,方便特殊值编码
交互可视化
例题
例 1:十六进制 0xC1480000 表示的单精度浮点数真值是多少?
转为二进制:1 10000010 10010000000000000000000
(负数) , - 尾数
(隐含 1 + 存储的 1001...)
例 2:将
, - 尾数存储部分:
(23 位)
编码:0 01111101 10000000000000000000000 = 0x3EC00000
例 3:单精度浮点数能精确表示的最大整数是多少?
尾数含隐含位共 24 位,因此能精确表示
超过此值的奇数就无法精确表示了(如
考点清单
- [ ] 单精度 1+8+23,偏置 127;双精度 1+11+52,偏置 1023
- [ ] 规格化数:隐含前缀 1,真值
- [ ] 非规格化数:隐含前缀 0,指数固定
- [ ] 特殊值编码:
、 、NaN 的阶码和尾数特征 - [ ] 十六进制
浮点真值的转换方法 - [ ] 偏置码的优势:便于比较大小
- [ ] 有效位数:单精度 24 位,双精度 53 位