3

可能重复:
C 中的 int 总是 32 位吗?

AFAIK,Pascal 的整数大小取决于平台(在 32 位计算机上它有 32 位,在 64 位计算机上它有 64 位)。

这在 C 中是否相同(我的意思是,在 32 位计算机上它的大小是 32 位,而在 64 位上它是 64 位)?

4

5 回答 5

4

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

于 2012-09-04T18:38:40.570 回答
2

它不仅取决于处理器架构,还取决于操作系统。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>INT32INT64UINT32UINT64__int32__int64__uint32__uint64

于 2012-09-04T18:43:59.797 回答
1

C 没有定义其整数类型的大小。你必须阅读编译器手册

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

于 2012-09-04T18:38:59.290 回答
1

该决定由编译器做出,您可以通过键入以下内容来查看特定情况下整数的大小(以字节为单位)printf("%d", (int)sizeof(int));:。

但是,我强烈建议您不要编写依赖于int特定数量大小的代码。

于 2012-09-04T18:41:47.910 回答
0

这是正确的。这取决于平台。

但是,这些天通常的做法是在int32 位或 64 位计算机上制作 32 位。在long int64 位计算机上long long int类型是 64 位,即使在 32 位计算机上类型也是 64 位。

正如@E_Net4 正确观察到的那样,C++ 标准允许与上述答案有相当大的差异,这仅适用于今天的惯例。(C++ 标准允许这种变化,因为它希望让编译器自由定义intlong int更不用说short int,以最大化特定处理器性能的方式。)

于 2012-09-04T18:39:47.860 回答