`int` 类型大小在 C 语言中是多少?

3

可能是重复问题:
C语言中的int类型是否总是32位?

据我所知,在Pascal中,Integer的大小取决于平台(在32位计算机上为32位,在64位计算机上为64位)。

那么在C语言中是否也是这样呢?(我的意思是,在32位计算机上它的大小为32位,在64位计算机上为64位)


@Mark:谢谢,我没有找到那个问题... - Patryk Wychowaniec
1
显然,每个人都正确地指出这是与实现有关的,但是就你在Pascal方面所说的具体内容而言:在C中,64位系统上“int”通常不是64位。在实践中,它往往是16位的16位系统和32位的其他所有系统,但有一些例外。 - Steve Jessop
C标准将int定义为计算机的“自然字长” - 因此在64位系统上它肯定可以是64位。 - user529758
@H2CO3:确实可能是这样,只不过问题让我觉得问问题者期望它是这样。普通读者可能认为64位Intel处理器的“自然字长”为64位,但普通的C语言实现者则不同意。标准规定,“'plain' int对象具有执行环境体系结构建议的自然大小”,实现者将其视为非规范性或允许在“自然大小”的含义上有一定的灵活性--你可以选择指责他们的什么行为 :-) - Steve Jessop
5个回答

4

大致上是这样的,但编译器有控制权。如果您只想检查环境中发生了什么,请使用sizeof运算符。如果您需要确保字节数固定且不将其留给环境/编译器,则stddef.h将包括诸如int64_t之类的类型(我认为在该文件中)。


2
它不仅依赖于处理器架构,还依赖于操作系统。 C语言规范没有提到整数类型的大小,因此这个任务是语言实现者的工作。请参考此处最受欢迎的答案以获取更多背景信息:64位Windows上long的位大小是多少?
总之,在Linux和Windows上,“int”都将是32位。对于其他平台,您需要查看它们在C编译器文档中的规格说明。然而,最佳实践是使用在中找到的类型 - uint32_t、int32_t、uint64_t、int64_t。
在Windows上,情况会有些棘手;inttypes.h是C99的一部分,Visual C++并不声称符合该标准。您可以从类似http://code.google.com/p/msinttypes/ 的项目中获得inttypes.h,或使用 - INT32、INT64、UINT32、UINT64。还有微软扩展__int32、__int64、__uint32、__uint64,您不需要任何其他头文件。

+1 建议使用精确宽度整数。注意:stdint.h 似乎也可在 Windows 上使用! - moooeeeep

1

C语言没有定义其整数类型的大小。您需要阅读编译器手册。

唯一的规则是sizeof char <= sizeof short <= sizeof int <= sizeof long


1
据我所知,long类型至少需要32位,long long类型至少需要64位,int类型至少需要16位,char类型至少需要8位。但是我不记得short类型的要求是多少了。 - Kendall Frey
@KendallFrey 我非常确定这些大小是以字节为单位给出的,也就是 char 大小。有些平台上 char 不是 8 位。 - user395760
1
@delnan,你不太确定是好事。没有给出实际大小,但所需的最小范围暗示了某些最小比特宽度。 - eq-
@eq- 这完全是可能的,感谢您纠正我。 - user395760
请注意,大小的限制并不意味着范围上的相应限制,因为short可能具有填充位,使其在sizeof中比char更大,但具有相同的值范围。这可能是反常的,但实际上并不被sizeof排序禁止。我认为整数提升规则暗示了int至少具有与charshort一样多的值位,因此存在一些相对范围的限制。 - Steve Jessop

1

这个决定是由编译器做出的,你可以通过输入以下代码来查看在你的特定情况下整数的大小(以字节为单位):printf("%d", (int)sizeof(int));

然而,我强烈建议你不要编写依赖于 int 大小为特定值的代码。


0

没错。这取决于平台。

然而,如今的通常做法是在32位或64位计算机上将int设置为32位。在64位计算机上,long int类型为64位,即使在32位计算机上,long long int类型也是64位。

正如@E_Net4所观察到的那样,C++标准允许与上述答案相差很大的变化,这只涉及到了当今的通常做法。(C++标准允许这种变化是因为它希望编译器可以自由定义intlong int,更不用说short int了,以最大化特定处理器的性能。)


long long int 实际上意味着它至少有 64 位。同样的,long int 至少有 32 位。 - E net4
@E_net4:你当然是对的。 - thb

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