2011-04-04 131 views
8

当我给sizeof(a),其中a=13.33,一个浮点变量,大小是4个字节。 但是,如果我直接给sizeof(13.33),大小是8个字节。为什么sizeof(13.33)是8个字节?

我不明白发生了什么事。有人可以帮忙吗?

+13

老兄,停止添加并移除'数学'标签来将这个问题颠覆到顶部。 – Xeo 2011-04-12 11:49:03

+1

尝试使用13.ff代替,也请参阅此链接 http://stackoverflow.com/questions/2331751/does-the-size-of-an-int-depend-on-the-compiler-and-or-processor – 2013-12-18 08:52:59

+0

[为什么浮点值如3.14在MSVC中默认被认为是双重](https://stackoverflow.com/q/4353780/995714) – 2017-08-21 09:06:13

回答

44

这些是语言的规则。

13.33是一个数字文字。它被视为双重因为它是双重的。如果你想把13.33当作浮点数字来处理,那么你需要声明13.33f。

13.33是双字面意思。如果sizeof(float)== 4,sizeof(13.33f)== 4也应该保留,因为13.33f是一个浮点数字。

19

文字13.33被视为双精度浮点值,8字节宽。

+2

要明确地标记一个数字文字作为单精度浮点数,请尝试使用'13.33f '。 sizeof(13.33f)'返回预期的4。 – 2011-04-04 10:37:25

13

13.33字面值被视为'double',而不是'float'。

改为尝试13.33f。

8

因为13.33double,如果分配给它,它会被截断为float。而double是8字节。要创建实际的浮动点,请使用13.33f(注意f)。

9

变量的类型和大小都很好。 这只是编译器有一些文字的默认类型,这些常量值在您的程序中被硬编码。

如果你要求sizeof(1),你会得到sizeof(int)。如果您要求sizeof(2.5),您将获得sizeof(double)。那些将分别适合char和float,但编译器具有文字的默认类型,并将它们视为直到赋值。

不过,您可以重写此默认行为。例如:

2.5 // as you didn't specify anything, the compiler will take it for a double. 
2.5f // ah ha! you're specifying this literal to be float 

干杯!

相关问题