我在維基百科(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' ... –