当我给sizeof(a)
,其中a=13.33
,一个浮点变量,大小是4个字节。 但是,如果我直接给sizeof(13.33)
,大小是8个字节。为什么sizeof(13.33)是8个字节?
我不明白发生了什么事。有人可以帮忙吗?
当我给sizeof(a)
,其中a=13.33
,一个浮点变量,大小是4个字节。 但是,如果我直接给sizeof(13.33)
,大小是8个字节。为什么sizeof(13.33)是8个字节?
我不明白发生了什么事。有人可以帮忙吗?
这些是语言的规则。
13.33是一个数字文字。它被视为双重因为它是双重的。如果你想把13.33当作浮点数字来处理,那么你需要声明13.33f。
13.33是双字面意思。如果sizeof(float)== 4,sizeof(13.33f)== 4也应该保留,因为13.33f是一个浮点数字。
文字13.33被视为双精度浮点值,8字节宽。
要明确地标记一个数字文字作为单精度浮点数,请尝试使用'13.33f '。 sizeof(13.33f)'返回预期的4。 – 2011-04-04 10:37:25
13.33字面值被视为'double',而不是'float'。
改为尝试13.33f。
因为13.33
是double
,如果分配给它,它会被截断为float
。而double
是8字节。要创建实际的浮动点,请使用13.33f
(注意f
)。
变量的类型和大小都很好。 这只是编译器有一些文字的默认类型,这些常量值在您的程序中被硬编码。
如果你要求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
干杯!
老兄,停止添加并移除'数学'标签来将这个问题颠覆到顶部。 – Xeo 2011-04-12 11:49:03
尝试使用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
[为什么浮点值如3.14在MSVC中默认被认为是双重](https://stackoverflow.com/q/4353780/995714) – 2017-08-21 09:06:13