我对这个问题找到了不同的答案,但我知道一定有一个明确的答案。 C 中四种主要数据类型的最小分配内存大小是多少?
int
、double
、float
和char
是我想到的。 signed
或 unsigned
类型是否会以任何方式改变尺寸?
ANSI C 为各种原始数据类型定义了以下大小。
从 C23 (C++20) 开始,需要补码,将下限扩大 1(因此现在需要
sigend char
能够保持 -128 而不是 -127)
浮点数和双精度数还有很多规则,但一般来说,浮点数的范围是 <= the range of a double (for modern machines---float is 4 bytes, double is 8).
标准仅保证
char
为 1
字节。有符号或无符号类型是否会以任何方式改变大小?
不。它仅影响所保存数据的范围。请参阅下面的示例了解短数据类型(2 个字节)。
这是一个很好的问题。我建议您参考C99 6.2.5。 Wikipedia C data types 文章很好。
sizeof()
)。 不仅如此,规范还允许填充位(例如用于纠错)。 因此,在 8 位字符系统上,如果 sizeof(int)
为 4,则最大 int 不一定是 2^31-1,因为规范允许其中一些位用作“填充”。 因此,唯一确定的方法是使用 limits.h
!float/double 也是实现定义的,尽管 double 总是比 float 大。 通常,这些由实现定义为与 IEEE-754 规范兼容(分别需要至少 32 位和 64 位),但 C99 并不需要它。 但如果你的char大小是32位,那么sizeof(float)可能只有1。
有符号/无符号不改变大小。
由于这些原因,
<stdint.h>
是 C 语言最重要的新增内容之一。 在此之前,编写跨平台代码极其困难。
您可以使用
sizeof(variable)
:
作为在我的本地计算机上运行此示例:
sizeof (char) = 1
sizeof (double) = 8
sizeof (float) = 4
sizeof (int) = 4
sizeof (long) = 4
sizeof (long long) = 8
sizeof (short) = 2
sizeof (void *) = 4
注意:您获得的值可能由操作系统/编译器/CPU 架构决定。
编写一个小测试程序并亲自看看:
int main(int argc, char* argv[])
{
printf("%d\n", sizeof(char) );
printf("%d\n", sizeof(int) );
printf("%d\n", sizeof(unsigned char) );
printf("%d\n", sizeof(unsigned int) );
printf("%d\n", sizeof(double) );
printf("%d\n", sizeof(float) );
return 0;
}
“int、float、double”取决于平台(16、32、64)。 标志不影响大小,只影响解释。