假定变量i、f、d的数据类型分别为int、float、double(int用补码表示,float和double用IEEE 754标准中的单精度和双精度浮点数据格式表示),已知i=785,f=1.5678e3,d=1.5e100,若在32位机器中执行下列关系表达式,则结果为真的是______。 I.i==(int)(float)i II.f==(float)(int)f III.f==(float)(double)f IV.(d+f)-d==f
时间: 2023-05-28 22:01:47 浏览: 1610
数据类型和输入输出
答案为:I、II、III。
解析:
I. (int)(float)i
int用补码表示,float用IEEE 754标准中的单精度浮点数据格式表示,转换时int先转换成float,再将float强制转换为int,这个过程中可能出现精度丢失,例如int i=785,其补码表示为00000000 00000000 00000011 00001001,转换为float后,末尾会有精度丢失,变成1.0000000e3,再强制转换为int,就变成了1000,所以i==(int)(float)i为真。
II. (float)(int)f
f为1.5678e3,int强制转换后变成了1567,再转换为float,变成了1567.0000,其和原来的f值不同,所以f==(float)(int)f为假。
III. (float)(double)f
double是比float更高精的类型,float转换为double并不会丢失精度,两者保持相等,所以f==(float)(double)f为真。
IV. (d f)-d==f
(d f)为double类型,f为float类型,进行运算时,float会自动提升为double类型,结果为double类型,与f进行比较时,需要将其转换为float,精度可能会有损失,所以(d f)-d==f为假。
阅读全文