题35
题目
Q:【2010 统考真题】假定变量
I. i == (int)(float)i
II. f == (float)(int)f
III. f == (float)(double)f
IV. (d + f) - d == fA. 仅 I 和 II B. 仅 I 和 III C. 仅 II 和 III D. 仅 III 和 IV
分析
A:
- 强制类型转换顺序
- int → float → double
- float型转换为int型
- 小数位部分被舍去
- int型精确到32位整数
- float型保存到1+23位
- I表达式分析
- i = 785
- 转换为二进制真值
- 小数点后9位
- 不会发生精度损失
- 正确
- II表达式分析
- float型f转换为int型
- 小数点后数位丢失
- 结果非真
- III表达式分析
- double型精度和范围大于float型
- float型转换为double型无损失
- 正确
- IV表达式分析
- 浮点运算d + f需要对阶
- 对阶后f尾数有效位舍去变为0
- d + f仍为d
- 减去d后结果为0
- 结果非真
- int型转换为float型
- 不会发生溢出
- 尾数位数关系可能有数据舍入
- 影响精度
- 32位int型转换为float型可能有损失
- 判断方法
- 转换为二进制真值
- 写为±1x…x×2^n形式
- 小数点后位数超过23位则损失
- 判断方法
- int型转换为double型
- 能保留精度

- 能保留精度