我知道用 f 为浮点数添加后缀可以让编译器知道它是浮点数而不是双精度数。在浮点数而不是双精度数上操作时,这对于防止不必要的强制转换很重要。但是,在我由外部公司提供的一些代码中,我看到了以下示例:
double i = 1.4f;
现在我想知道在这种情况下会发生什么?编译器会默默地忽略'f',它只是与任何事情无关的东西,我可以放心地忽略吗?
然后我想知道,如果将数字分配给在其他地方带有 f 后缀的双精度数,而不仅仅是在初始化时,那会是不同的情况吗?
C标准的相关引用:
§6.4.4.2 第 4 段
如果以字母 f 或 F 为后缀,则为 float 类型。
第 5 段
浮动常量被转换为内部格式,就像在翻译时一样。
第 7 段
浮动常量的转换时转换应与库函数(如 strtod)对字符串的执行时转换相匹配,给定适合两种转换的匹配输入、相同的结果格式和默认的执行时舍入。
假设 IEEE-754 数字1.4f
产生值:
1.39999997615814208984375
而1.4
有值:
1.399999999999999911182158029987476766109466552734375.
一个好的编译器应该将 1.4f 直接转换为 double。
兼容的编译器会将 1.4f 转换为float
format,然后将值转换为double
,然后将值分配给i
.
顺便说一句,从 FORTRAN 时代开始,一个名为的变量i
通常保存整数值。