C中整数的大小

C中整数的大小,c,sizeof,specifications,C,Sizeof,Specifications,ANSI C规范是否要求int的大小等于系统的字大小(32位/64位) 换句话说,我可以根据分配给int的空间来破译系统的字长吗?int类型的字长取决于实现,但不能小于16位。请参阅最小类型限制部分 Linux内核开发站点声称long类型的大小保证为机器的字大小,但这种说法可能是错误的:我在标准中找不到任何证实,而且在Win64系统上long只有32位宽(因为这些系统使用数据模型).语言规范建议int应具有硬件平台的自然“单词”大小。然而,这并不是严格要求的。如果您注意到,为了简化32位到64位

ANSI C规范是否要求
int
的大小等于系统的字大小(32位/64位)


换句话说,我可以根据分配给
int
的空间来破译系统的字长吗?

int类型的字长取决于实现,但不能小于16位。请参阅
最小类型限制
部分


Linux内核开发站点声称
long
类型的大小保证为机器的字大小,但这种说法可能是错误的:我在标准中找不到任何证实,而且在Win64系统上
long
只有32位宽(因为这些系统使用数据模型).

语言规范建议
int
应具有硬件平台的自然“单词”大小。然而,这并不是严格要求的。如果您注意到,为了简化32位到64位的代码转换,一些现代实现更喜欢将
int
保留为32位类型,即使底层硬件平台具有64位字大小


正如Frederic已经指出的,在任何情况下,大小都不能小于16个值形成位。

您应该检查系统提供的limits.h头文件。INT_MAX声明可以帮助您反向计算整数必须具有的最小大小。有关详细信息,请查看

最初的意图是int将是字大小-最有效的数据处理大小。然而,通常会发生的情况是,大量的代码被编写,假定int的大小是X位,当代码运行的硬件移动到更大的字大小时,粗心编写的代码就会中断。编译器供应商必须让他们的客户满意,所以他们说“好吧,我们将保持int大小不变,但现在我们将使long更大”。或者,“啊……太多人抱怨我们将long变大,我们将创建一个long-long类型,同时保留sizeof(int)=sizeof(long)”。所以,这些天,一切都一团糟:

ANSI C规范是否要求int的大小等于系统的字大小(32位/64位)

基本上是这个想法,但它并不坚持

换句话说,我可以根据分配给int的空间来破译系统的字长吗


实际上并非如此。

C99使用“自然尺寸”一词;它没有提到“单词”或“单词大小”。我也没有看到任何关于单词大小的明确讨论。请注意,64位版本的Windows同时具有
int
long
32位。据我所知,这个决定符合C标准。@Matthew,绝对是这样,我用这个信息更新了我的答案。édéric,我不是说Windows总体上符合C标准,只是字体大小部分。:)C99还有许多其他部分被他们忽略了。这是计算sizeof(int)是什么的一种方法,但没有提供跨平台的问题评论(ANSI C规范是否要求int的大小等于单词大小(32位/64位)系统的大小?我可以根据分配给int的空间来解密系统的字长吗?)唯一固定的iirc是sizeof char,它是1