单选题
假定变量i、f和d的数据类型分别为int、float和double(int用补码表示,float和double分别用IEEE 754单精度和双精度浮点数格式表示),已知i=785、f=1.5678E3、d=1.5E100,若在32位机器中执行下列关系表达式,则结果为“真”的是______。
Ⅰ.i=(int)(float)i
Ⅱ.f=(float)(int)f
Ⅲ.f=(float)(double)f
Ⅳ.(d+f)-d=f
【正确答案】
B
【答案解析】[解析] 题中三种数据类型强制类型转换的顺序为int->float->double,int表示的类型为整数,如果将float转换为int,小数位部分会被舍去,而int是精确到32位的整数,float只保存到1+23位,故一个长为32位的int整数在转换为float时也会有损失,但i<1024(10位),因此,Ⅰ正确。double的精度和范围都比float大,float转换为double不会有损失,Ⅲ正确。对于Ⅳ,初看似乎没有问题,但浮点运算d+f时需要对阶,对阶后f的尾数有效位被舍去而变为0,故d+f仍然为d,再减去d后结果为0,故Ⅳ结果不为真。
从int转换为float时,虽然不会发生溢出,但由于尾数位数的关系,可能有数据舍入,而转换为double则能保留精度。