假定变量 i 、f 和 d 的数据类型分别为 int 、float 和 double(int 用补码表示,float 和 double 分别 用 IEEE 754单精度和双精度浮点数格式表示),已i=785,f=1.5678c3,d=1.5e100 。 若在32 位机器中执 行下列关系表达式,则结果为“真”的是()。
(I)i=(int)(float)i (II)f=(float)(int)f
(III)f=(float)(double)f (IV)(d+f)-d=f
A. 仅 I 和 Ⅱ B. 仅 I 和 Ⅲ C. 仅 Ⅱ 和 Ⅲ D. 仅 Ⅲ 和 IV
[tag_link]
正确答案:B
本题考查 不同长度的类型转换 ,题中三种数据类型的精度从低到高为 int → float → double。
变量说明: i = 785 (int):32 位整数,用补码表示。
f = 1.5678e3 = 1567.8 (float):32 位 IEEE754 单精度浮点数。
d = 1.5e100 (double):64 位 IEEE754 双精度浮点数。
对于 I. i == (int)(float)i i 是整数 785。
(float)i 会把整数 785 转为浮点数 —— 精度 足够准确表示 785 。
再 (int)(float)i 转回整数,仍然是 785。
✅ 结果:真 对于 II. f == (float)(int)f f = 1567.8 ,转换为 (int)f 得到 1567 (小数部分被截断)。
再转回 (float)(int)f 得到 1567.0。
显然:1567.8 ≠ 1567.0 ❌ 结果:假 对于 III. f == (float)(double)f f 是 float(32 位),被转为 double (64 位)后,再强转回 float 。
由于 double 转 float 的精度缩减回原始,值不变。
所以整体等价于 f == f 。
✅ 结果:真 对于 IV. (d + f) - d == f d = 1.5e100 (极大), f = 1567.8 (非常小,相比于 d)。
d + f ≈ d (因为 f 精度在 d 这个数量级上被吞掉, f 被舍入掉 )。
所以 (d + f) - d ≈ 0 ,不等于 f ❌ 结果:假 所以 正确答案:I、III ,答案选择 B。