问答题 假定变量i是一个32位的int型整数,f和d分别为float型(32位)和double型(64位)实数。x、y、z是float型(32位)或double型(32位)实数。分析下列各布尔表达式,说明结果是否在任何情况下都是“true”?
1)i==(int)((double)i)
2)f==(float)((int)f)
3)f==(float)((double)f)
4)d==(double)((float)d)
【正确答案】
【答案解析】强制类型转换,转换过程有两个,一个是unsigned int→int→long→double,另一个是float→double,从后向前转换会使得数据丢失,进而使等号不成立。
1)是。因为double型比int型精度高,所以int型变量转换为double时不会有精度损失。
2)不是。因为float型有小数部分,而int型没有小数部分,所以把float型变量转换为int型时,可能会丢失小数部分。
3)是。因为double型比float型精度高,所以float型变量转换为double时不会有精度损失。
4)不是。因为float型比double型有效位数少,所以double型变量转换为float型时会有精度损失。