C数据类型大小

7

我如何知道计算机中所有数据类型的大小?


2
什么?你可能需要稍微改一下那个问题的措辞。这些数据类型在哪里?有一个使用它的代码示例吗?通常,sizeof X 应该返回类型 X 的大小。 - Ritwik Bose
3
@Mechko:这个语法是针对变量X的。如果X是一个类型,你应该使用sizeof(X) - Larry Wang
4个回答

8
以下程序应该可以解决原始类型的问题:
#include <stdio.h>
int main()
{
    printf("sizeof(char) = %d\n", sizeof(char));
    printf("sizeof(short) = %d\n", sizeof(short));
    printf("sizeof(int) = %d\n", sizeof(int));
    printf("sizeof(long) = %d\n", sizeof(long));
    printf("sizeof(long long) = %d\n", sizeof(long long));
    printf("sizeof(float) = %d\n", sizeof(float));
    printf("sizeof(double) = %d\n", sizeof(double));
    printf("sizeof(long double) = %d\n", sizeof(long double));
    return 0;
}

这将打印出类型使用的“字节”数量,根据定义sizeof(char) == 1。1表示多少位(即有多少个比特)是由实现特定并且可能取决于底层硬件。例如,一些机器具有7位字节,而另一些则具有10或12位字节。


2
@JuanPablo - 因为无论在哪台机器上运行此代码,它们的大小都是相同的。 - detly
1
我有很多相同大小的类型,但这并不是重点。这些类型不仅仅取决于它们的大小。在我的机器上,程序告诉我以下内容: sizeof(char) = 1 sizeof(short) = 2 sizeof(int) = 4 sizeof(long) = 8 sizeof(long long) = 8 sizeof(float) = 4 sizeof(double) = 8 sizeof(long double) = 16 - Clearer
1
C语言不允许7位字节。CHAR_BIT至少应为8。POSIX要求CHAR_BIT必须恰好为8。 - R.. GitHub STOP HELPING ICE
@Clearer:我已经按照@Amarghosh的解释对您的代码块进行了格式化;如果您在帖子下方点击“编辑”链接,您可以看到最终结果是什么样子的,以及如何在未来格式化代码。 :-) - James McNellis
@R..:我说的不是C语言,而是在提到7位字节时指的是机器。有些机器确实有7位字节,即使C要求字节至少为8位长。 @Amraghosh和James McNellis:谢谢你们。 - Clearer
显示剩余2条评论

6

您可以对每个需要知道大小的类型应用sizeof,然后打印结果。


2
@JuanPablo:你是指8 4 4 8,对吧?intlong的大小可能相同。没有规定long必须能够表示比int更大范围的值,只要它至少能够表示int可表示的范围即可。 - James McNellis
1
@James - 仅为了正确性,它说shortint至少必须为2个字节,而long必须至少为4个字节,并且short < int < long - Chris Lutz
1
@James McNellis:这不是真的,在C99 5.2.4.2.1中,int的最小允许最大值为32767,但long的最小允许最大值为2147483647。int可以与long一样大,但这并不意味着long可以和int一样小。 - dreamlax
2
@dreamlax:抱歉,我表达得不太清楚。我的意思是intlong可能具有相同的大小(在这种情况下,int至少需要32位大小)。 - James McNellis
2
@JuanPablo:根据平台的不同,int 可能与 longshort 大小相同。int 至少应该有 16 个字节宽度(最小必须能够表示范围[-32767,32767]),但可能会更宽(通常是更宽)。 - John Bode
显示剩余3条评论

2

sizeof(T)会返回传递给它的任何类型的大小。如果你想查找特定程序中使用或定义的所有数据类型的大小,那么你将无法做到这一点--C编译时不会维护那个层次的信息。


0

正确的类型是 int32_tint64_t 而不是 int32int64。在示例中使用一些奇怪的系统特定类型而不是标准类型会被扣除 1 分。 - R.. GitHub STOP HELPING ICE
你说得对。是我粗心犯了个错误。已经修复并添加了适当的 #include - Larry Wang

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