附加到数字的“.f”的目的是什么?

我在程序中看到“1 / 3.f”,并想知道“.f”是什么意思。 所以尝试了我自己的scheme:

#include<iostream> using namespace std; int main() { cout<<(float)1/3<<endl; cout<<1/3.f<<endl; cout<<1/3<<endl; } 

.f使用像一个演员? 任何地方,我可以阅读更多关于这个有趣的语法?

没有.f数字被解释为一个整数,因此1/3(int)1/(int)3 => (int)0而不是所需的(float)0.333333.f告诉编译器将文字解释为floattypes的浮点数。 还有其他的这样的结构,例如0UL意味着一个(unsigned long)0 ,而一个普通的0将是一个(int)0

.f实际上是两个组件, 它表示文字是一个浮点数而不是一个整数,而f后缀告诉编译器文字应该是浮点types,而不是用于浮点文字的默认双精度types。

免责声明; 在上面的解释中使用的“投射构造”不是实际的投射,而是指示文字types的一种方式。

如果你想知道所有关于文字和后缀的信息,你可以阅读C ++标准( 1997草案 , C ++ 11草案 , C ++ 14草案 ),或者阅读正式的教科书如Stroustrup的The C ++ Programming Language 。

顺便说一句,在你的例子(float)1/3 ,文字13实际上是整数,但是1首先被你的types转换为浮点数,然后3被隐式转换为浮点数,因为它是右手浮点运算符的操作数。 (操作符是浮点,因为它的左操作数是浮点数。)

3.相当于3.0 ,是双倍的。

f按照数字文字使它成为一个浮点数。

默认情况下, 3.2被视为double ; 所以为了强制编译器把它当作float ,你需要在最后写f

只要看到这个有趣的示范:

 float a = 3.2; if ( a == 3.2 ) cout << "a is equal to 3.2"<<endl; else cout << "a is not equal to 3.2"<<endl; float b = 3.2f; if ( b == 3.2f ) cout << "b is equal to 3.2f"<<endl; else cout << "b is not equal to 3.2f"<<endl; 

输出:

a不等于3.2
b等于3.2f

在ideone上做实验: http : //www.ideone.com/WS1az

尝试将variablesa的types从float更改为double ,再次查看结果!

3.f是3.0f的缩写 – 数字3.0是浮点types的浮点数。

小数点和f有不同的目的,所以不是真的.f

你必须明白,在C和C ++中,一切都是键入的,包括文字。

3是一个文字整数。 3.是一个字面double 3.f是一个字面float。

IEEE浮点数的精度比双精度要低。 float仅使用32位,具有22位尾数和10位指数(包括每个的符号位)。

double给你更多的准确性,但是有时你不需要这样的准确性(例如,如果你正在计算只是估计值的数字),浮点数就足够了,如果你存储了大量的数据例如处理大量的时间序列数据),这可能比准确性更重要。

因此float仍然是一个有用的types。

你不应该把它与printf和等价语句所使用的符号混为一谈。