我在维基百科(http://en.wikipedia.org/wiki/Type_conversion#Implicit_type_conversion)上偶然发现了下面的例子。C中的隐式类型转换
#include <stdio.h>
int main()
{
int i_value = 16777217;
float f_value = 16777217.0;
printf("The integer is: %i\n", i_value); // 16777217
printf("The float is: %f\n", f_value); // 16777216.000000
printf("Their equality: %i\n", i_value == f_value); // result is 0
}
他们的解释:“这奇数行为是由i_value的隐式转换引起的浮起当它与f_value比较;被比较,其损失精度,使得值的铸造不同”
这不正确吗?如果i_value被转换为浮点数,那么两者在精度上会有相同的损失,并且它们会相等。 所以i_value必须转换成双倍。
使用g ++(GCC 4.6.2)我得到'1'的等式。 –
@Kerrek:和我。在VS中,我得到0. –
@OliCharlesworth:我很好奇将字面值改为f或将类型改为double值 - 在所有情况下我都得到了'1' ... –