附加到数字的“.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
,文字1
和3
实际上是整数,但是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和等价语句所使用的符号混为一谈。