我知道用f后缀浮点数让编译器知道它是浮点而不是double。在浮子上操作而不是双打时,防止不必要的铸造非常重要。但是在某些代码中,我是由外部公司提供的,例如我见过以下内容:
double i = 1.4f;
现在我想知道的是这种情况会发生什么?编译器是否会默默地忽略'f',它只是对任何东西都没有影响的东西,我可以放心地忽略它?
然后我想知道如果将数字分配给其他地方带有f后缀的双打,那么不仅仅是初始化会是一个不同的情况吗?
答案 0 :(得分:11)
C标准的相关引用:
§6.4.4.2第4段
如果以字母f或F为后缀,则表示类型为float。
第5段
浮动常量将转换为内部格式,就像在转换时一样。
第7段
浮动常量的转换时转换应该与库函数(如strtod)的字符串执行时转换相匹配,给定适合两种转换的匹配输入,相同的结果格式和默认的执行时间舍入。 / p>
假设IEEE-754数字1.4f
产生值:
1.39999997615814208984375
而1.4
的值为:
1.399999999999999911182158029987476766109466552734375.
答案 1 :(得分:3)
一个好的编译器应该直接将1.4f转换为double。
兼容编译器会将1.4f转换为float
格式,然后将值转换为double
,然后将值赋给i
。
顺便说一句,历史上从FORTRAN开始,名为i
的变量通常包含整数值。