关于C/C++中字母f(浮点类型)的问题

5

我是一个新手程序员,对C/C++编程不熟悉,不明白为什么在赋值的时候数字后面要加上字母“f”,像这样:

#include <stdio.h>
int main() 
{
    float my_float = 2.34f;
    double my_double = 2.34;
}

我找了一会儿,认为如果我不加上这个字母“f”,变量my_float将会是一个double类型。我的想法正确吗? 我找到了一些方法来查找变量或其类型(在这种情况下是my_float)使用的内存,但我不太懂,请有经验的人帮助我。


4
它们在内存中的大小(因此准确性)不同。 2.34 = 双精度型 2.34f = 单精度型 - UKMonkey
2
它们被称为“字面值”-这是C ++的参考资料:http://en.cppreference.com/w/cpp/language/expressions#Literals - UnholySheep
好的,我知道了,谢谢你的回答。 - Lê Huy Việt
2个回答

阿里云服务器只需要99元/年,新老用户同享,点击查看详情
10
在这种情况下,他们不需要这样做。 2.34ffloat 类型的字面量(根据你的问题,与你想的方式相反)。比较一下 double 类型的字面量 2.34。 更详细地说,如果你写成 float my_float = 2.34;,编译器会自动为你执行转换。 有时候,你确实需要显式指定字面量。例如,在 C++ 中,请考虑:
void foo(const double&){
    // reformat hard disk
}

void foo(const float&){
    // pay me a bonus
}

int main()
{
    foo(2.34f);
}

在这里,我们强制调用适当的 foo 重载。


1
简短的回答是: 对于带有小数点的数字字面量,后缀为"f"或"F"将告诉编译器您的数字字面量应被视为float类型而不是double类型; 如果后缀为"l"或"L",它将被视为long double类型。在大多数系统中,float类型在内存字节中的大小只有double类型的一半,因此精度远低于double类型。 这个后缀来自于古老的C语言(尽管我不知道它是否在早期的语言中使用过)。我建议你阅读最好的关于C语言的书籍——《C程序设计语言》(Kernighan和Ritchie著)。特别是从这本书中:

Image from 'The C Programming Language, 2nd. Ed., Kernighan & Ritchie


在每个章节的末尾完成示例练习。 - Bathsheba

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,