Appearance
题目
已知 float 型变量用 IEEE 754 单精度浮点数格式表示。若 float 型变量 x 的机器数为 8020 0000H,则 x 的值是( )。
错因
B
把所有 float 都当成规格化数,按规格化公式硬套:尾数前补 1 → "1.0100..." → ;指数 → 真值 = → 算出 。没识别出"指数全 0"的特殊语义——指数全 0 表示非规格化数,尾数前要补 0 不补 1,且真指数固定为 。
C
公式更乱:把指数全 0 错认成"指数偏移用 126"或"补一个偏移",得 ,又像规格化那样在尾数前补 1,最后得 。混合了规格化和非规格化的两套规则,结果两边都不靠。
D
把"指数全 0"误当成 NaN。NaN 的判别条件是 指数字段全 1(255)且尾数非零——不是指数全 0。指数全 0、尾数也全 0 是 ±0;指数全 0、尾数非 0 是非规格化数。题目是后者。
总解析
第一步:拆开 32 位机器数
- 符号 (负)
- 指数字段
- 尾数字段 (最高位是第 22 位,本题第 22 位 = 0、第 21 位 = 1,其余 = 0)
第二步:识别格式(关键)
| 指数字段 | 尾数字段 | 含义 |
|---|---|---|
| 非 0 | 非规格化数 | |
| 任意 | 规格化数 | |
| 非 0 | NaN |
本题指数全 0、尾数非 0 → 非规格化数。不是 NaN(D 错)。
第三步:套非规格化公式
注意:① 尾数前补 0 不补 1;② 真指数固定 ,不是 。
把 写成小数:
最终答案是 A()。
记忆口诀:
- 规格化数:尾数前隐藏 1,真指数 = 。
- 非规格化数():尾数前隐藏 0,真指数 = (固定,不是 !)。这个细节错的人最多。