Appearance
题目
已知 float 型变量用 IEEE 754 单精度浮点数格式表示。若 float 型变量 x 的机器数为 4730 0000H;则 x 的值为( )。
错因
A
两个错叠加:阶码减偏移时算成 (误用 128 偏移、或拿 short 的偏移搬来),且尾数把隐含 1 漏了——直接把 011 当 0.011 = 0.375。两个错都犯,结果就是 。一旦其中任何一个细节回正,答案都会向右移。
B
阶码部分理解对了"减偏移",但偏移取错——用了 128 而不是 127(误把"中间值 128"当偏移、或与移码的 混了)。尾数项算对了 ,所以最终差在指数: 比正确答案少了一个 2 倍的 。
C
阶码用对了 127 偏移,得到 没问题;但尾数没加隐含的 1,把 直接读成 。IEEE 754 规格化数的尾数部分前面有一个默认存在但不存储的 1("隐含位"),漏了它整个尾数的真值就少了 1。
总解析
思路:单精度 IEEE 754 把 32 位机器数划成"1 位符号 + 8 位阶码 + 23 位尾数"。还原真值的标准三步——
- 拆出位段
- 阶码减偏移:实际指数
- 拼真值:(规格化数)
任何一步出错都会落到三个错项之一。
第一步:把 4730 0000H 拆成 32 位二进制
按 切:
第二步:算实际指数
减偏移(单精度偏移恒为 127):
第三步:算尾数真值(注意隐含 1)
规格化数尾数 = (前面有个不存储的隐含 1)。M 字段非 0 部分只有最高 3 位的 011,后面全是 0:
| 位 | 值 | 权重 | 贡献 |
|---|---|---|---|
| 隐含 | 1 | 1 | |
| 0 | 0 | ||
| 1 | 0.25 | ||
| 1 | 0.125 | ||
| 余下 23−3 位 | 0 | … | 0 |
| 合计 | 1.375 |
即 。
第四步:拼出真值
最终答案是 D()。
单精度还原速记表:
| 步骤 | 关键点 | 易错 |
|---|---|---|
| 拆段 | 1 / 8 / 23 | 多/少切一位 |
| 阶码 | 偏移 127(不是 128 / 256) | 与移码 混 |
| 尾数 | 规格化数有隐含 1 | 漏 1 → 系数从 1.x 变 0.x |
| 拼装 | 系数和指数错位 |
口诀:8 位阶码减 127、23 位尾数前补 1。