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

时间:2011-01-28 12:24:08

标签: c++ syntax casting

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

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

.f是否像演员一样使用?我可以在哪里阅读更多有关这种有趣语法的内容吗?

5 个答案:

答案 0 :(得分:55)

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

数字文字后面的

f使它成为一个浮点数。

答案 1 :(得分:44)

如果没有.f,则数字会被解释为整数,因此1/3(int)1/(int)3 =&gt; (int)0而不是所需的(float)0.333333.f告诉编译器将文字解释为float类型的浮点数。还有其他此类构造,例如0UL表示(unsigned long)0,而普通0则表示(int)0

.f实际上是两个组件,.表示文字是浮点数而不是整数,f后缀告诉编译器文字应该是float类型,而不是用于浮点文字的默认double类型。

声明;上面解释中使用的“强制转换构造”不是实际的强制转换,而只是表示文字类型的一种方式。

如果您想了解所有关于文字和可以在其中使用的后缀的内容,您可以阅读C ++标准,(1997 draftC++11 draftC++14 draft,{{3} }或者,看看一本体面的教科书,例如Stroustrup的C++17 draft

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

答案 2 :(得分:18)

默认情况下,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

尝试将变量a的类型从float更改为double,再次查看结果!

答案 3 :(得分:8)

3.f是3.0f的缩写 - 3.0作为float类型的浮点文字。

答案 4 :(得分:2)

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

你必须明白,在C和C ++中,所有内容都是打字的,包括文字。

3是一个字面整数。 3.是双字面的 3.f是文字浮点数。

IEEE float的精度低于double。 float只使用32位,22位尾数和10位指数(包括每个的符号位)。

double为您提供更高的准确性,但有时您不需要这样的准确性(例如,如果您正在计算的数字只是首先估计的数字)并且浮点数给出的就足够了,并且如果您存储大数字它们(例如处理大量时间序列数据)可能比准确性更重要。

因此,浮动仍然是一种有用的类型。

您不应将此与printf和等效语句使用的符号混淆。