题35

题目

Q:【2010 统考真题】假定变量 的数据类型分别为 int、float 和 double (int 型用补码表示, float 型和 double 型分别用 IEEE754 单精度和双精度浮点数格式表示), 已知 ,若在 32 位机器中执行下列关系表达式,则结果为 “真” 的是 ( )。

I. i == (int)(float)i
II. f == (float)(int)f
III. f == (float)(double)f
IV. (d + f) - d == f

A. 仅 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型
    • 能保留精度