`int` type size int C
Possible Duplicate:
Is int in C Always 32-bit?
号
afaik的整数大小取决于平台(在32位计算机上它有32位,在64位计算机上它有64位)。
这在C中是相同的吗(我的意思是,在32位计算机上,它的大小是32位,在64位计算机上是64位)?
- @马克:谢谢,我没有找到那个问题……
- 显然,每个人都是正确的,因为它依赖于实现,但具体参考您对pascal的看法:在C中,int在64位系统上通常是64位的情况并非如此。实际上,它在16位系统中趋向于16位,而在其他所有系统中趋向于32位,但这种趋势有一些例外。
- C标准将"int"定义为"计算机的自然字大小",因此在64位系统上它绝对可以是64位的。
- @H2CO3:这是真的,只是这个问题向我暗示了提问者可能会期待它。一般读者可能会认为64位Intel处理器的"自然字大小"是64位,但一般的C实现者不同意。该标准称,"一个"普通"的int对象具有执行环境架构所建议的自然大小",实施者认为要么是非规范性的,要么是允许"自然大小"含义中的余地,你可以选择你想指控他们的内容:—)
差不多,但编译器有控制权。如果您只想检查环境中发生了什么,请使用sizeof操作符。如果需要确保字节数是固定的,而不是由环境/编译器来决定的话,stddef.h将包括像int64_t这样的类型(我认为在该文件中)。
它不仅依赖于处理器体系结构,还依赖于操作系统。C语言规范没有提到整数类型的大小,因此任务是语言实现者的工作。请看下面的最热门答案了解更多背景:
64位窗口上long的位大小是多少?
总之,在Linux和Windows上,"int"都是32位的。对于其他平台,您必须在它们的C编译器文档中检查它们的规范。然而,最佳实践是使用--uint32_t、int32_t、uint64_t、int64_t中的类型。
在Windows上,这有点困难;EDCOX1 15是C99的一部分,Visual C++不要求遵从。你可以从http://code.google.com/p/msinttypes/等项目中获得inttypes.h,或者使用—INT32、INT64、UINT32、UINT64。还有微软的扩展名__int32,__int64,__uint32,__uint64,你不需要额外的头文件。
- +1表示使用精确的宽度整数。注:很明显,stdint.h也可以从Windows中使用!?
这个决定是由编译器做出的,您可以通过键入以下内容来查看特定情况下整数的大小(以字节为单位):printf("%d", (int)sizeof(int));。
不过,我强烈建议您不要编写依赖于int大小的特定数量的代码。
C不定义其整数类型的大小。你必须阅读编译器手册
唯一的规则是sizeof char<=sizeof short<=sizeof int<=sizeof long
- IIRC,long必须至少为32位,long long至少为64位,int至少为16位,char至少为8位。不过,我想不起来这可能是什么。
- @Kendallfrey我很确定这些大小是以字节(也就是char大小)表示的。有些平台的char不是8位。
- @德尔南,你不太确定很好。没有给出实际大小,但某些最小位宽度是由所需的最小范围表示的。
- @情商-那是完全可能的,谢谢你让我直截了当。
- 还要注意,对大小的限制并不意味着对范围有相应的限制,因为short可能有填充位,使得sizeof中的填充位比char中的填充位大,但具有相同的值范围。这是反常的,但并没有被sizeof命令所禁止。我认为整数提升规则意味着,虽然int的值位至少与char或short的值位相同,但对相对范围有一些限制。
这是正确的。这取决于平台。
然而,现在的惯例是在32位或64位计算机上生成一个int32位。在64位计算机上,long int类型为64位,而在32位计算机上,long long int类型为64位。
正如@ EyNET4正确地观察到的,C++标准允许从上面的答案中得到很大的变化,这只是今天的惯例。(C++标准允许这样的变体,因为它希望让编译器自由地定义EDCOX1×2和EDCOX1×3,更不用说EDCOX1×7,以最大化特定处理器的性能的方式。)
- long long int实际上意味着它至少有64位。对于long int来说也是一样,它至少有32位大。
- @当然,你是对的。