Appearance
题目
float 类型(即 IEEE754 单精度浮点数格式)能表示的最大正整数是( )。
错因
A
两处错叠加——尾数漏隐含位 1(把 误算成 )且阶码错算为 126(漏一位):
凡是题目里" 小一档、 也小一档"的选项,多半是规格化数计算流程里把"最大阶码"和"尾数全 1 的真值"两件事都做错了。
B
只错在漏掉隐含位 1——把尾数 (24 位 1 含隐含位)算成了 (只看显式 23 位):
IEEE 754 规格化数的尾数实际值是 (开头那个 1 是默认隐含的,不存数到机器里),不是 。
C
只错在阶码——把最大真值阶码算成了 126 而不是 127:
可能的诱因:
- 把阶码偏置当成了 128(实际是 127 = ,n=8)
- 误以为"最大有效阶码 E=254 减偏置 127 = 127,再减 1"——其实不需要再减 1
总解析
第一步:IEEE 754 单精度的三段结构
| 字段 | 位数 | 值的含义 |
|---|---|---|
| S | 1 | 符号位(0 = 正,1 = 负) |
| E | 8 | 移码阶码,偏置值 = 127 |
| M | 23 | 尾数小数部分,隐含 "1." 不存 |
第二步:找"最大正数"的位串
要让数尽可能大:
- (正数)
- 取最大有效阶码——E = 11111111(255)保留给 / NaN,E = 11111110 = 254 才是最大有限阶码
- 全 1:
第三步:算出真值
真值 =
真值阶码:
真值尾数:
(展开:)
第四步:相乘化简
最终答案是 D()。
单精度三个易错点速记:
| 易错点 | 正确值 | 常见错值 |
|---|---|---|
| 阶码偏置 | 127(,n=8) | 128 |
| 最大有效阶码 | E = 254 → 真值 = 127 | E = 255(被 ∞/NaN 占了) |
| 尾数实际值 | (漏隐含 1) |
关于"最大正整数":单精度规格化数尾数有 24 位精度(含隐含 1)——能精确表示的最大整数是 。但题目问"能表示"的最大正整数,不要求"逐数精确",只要这个浮点位串解释出来恰好是整数即可。
恰好是整数(因为 是整数、 也是整数),所以"最大正数"和"最大正整数"在本题里指向同一个值。