可能重复:
C 中的 int 总是 32 位吗?
AFAIK,Pascal 的整数大小取决于平台(在 32 位计算机上它有 32 位,在 64 位计算机上它有 64 位)。
这在 C 中是否相同(我的意思是,在 32 位计算机上它的大小是 32 位,而在 64 位上它是 64 位)?
可能重复:
C 中的 int 总是 32 位吗?
AFAIK,Pascal 的整数大小取决于平台(在 32 位计算机上它有 32 位,在 64 位计算机上它有 64 位)。
这在 C 中是否相同(我的意思是,在 32 位计算机上它的大小是 32 位,而在 64 位上它是 64 位)?
差不多,但编译器有控制权。sizeof
如果您只想检查环境中发生的情况,请使用运算符。int64_t
如果您需要确保字节数是固定的并且不将其留给环境/编译器,stddef.h 将包括(我认为在该文件中)之类的类型。
它不仅取决于处理器架构,还取决于操作系统。C 语言规范没有提到整数类型的大小,因此该任务是语言实现者的工作。在此处查看投票最多的答案以获取更多背景信息:
在 64 位 Windows 上 long 的位大小是多少?
总之,在 Linux 和 Windows 上,“int”都是 32 位的。对于其他平台,您必须在他们的 C 编译器文档中检查他们的规范。然而,最佳实践是使用在<inttypes.h>
-- uint32_t
, int32_t
, uint64_t
,中找到的类型int64_t
。
在 Windows 上,这有点困难。inttypes.h
是 C99 的一部分,Visual C++ 不声明其符合性。您可以从http://code.google.com/p/msinttypes/ 之inttypes.h
类的项目中获取,或使用-- , , , . 还有 Microsoft 扩展, , , ,您不需要任何额外的头文件。 <windows.h>
INT32
INT64
UINT32
UINT64
__int32
__int64
__uint32
__uint64
C 没有定义其整数类型的大小。你必须阅读编译器手册
唯一的规则是 sizeof char <= sizeof short <= sizeof int <= sizeof long
该决定由编译器做出,您可以通过键入以下内容来查看特定情况下整数的大小(以字节为单位)printf("%d", (int)sizeof(int));
:。
但是,我强烈建议您不要编写依赖于int
特定数量大小的代码。
这是正确的。这取决于平台。
但是,这些天通常的做法是在int
32 位或 64 位计算机上制作 32 位。在long int
64 位计算机上long long int
类型是 64 位,即使在 32 位计算机上类型也是 64 位。
正如@E_Net4 正确观察到的那样,C++ 标准允许与上述答案有相当大的差异,这仅适用于今天的惯例。(C++ 标准允许这种变化,因为它希望让编译器自由定义int
,long int
更不用说short int
,以最大化特定处理器性能的方式。)