为什么sizeof(13.33)是8个字节?
当我给sizeof(a)
,其中a=13.33
,一个浮点变量,大小是4个字节。 但如果直接给出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.33字面值被视为“双重”,而不是“浮动”。
请尝试13.33f。
变量的类型和大小都很好。 只是编译器有一些文字的默认类型,那些在程序中硬编码的常量值 。
如果你请求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
干杯!
因为13.33
是一个double
,如果你赋值它会被截断为float
。 double
是8字节。 要创建一个真正的浮点数,请使用13.33f
(注意f
)。