什么决定了C中整数的大小?

Raj*_*Raj 3 c c++ sizeof

可能重复:
int,long等
的大小int的大小是否取决于编译器和/或处理器?

我不确定之前是否曾经问过类似的问题(至少,我在搜索时找不到任何问题,所以想到问自己).

是什么决定了int(和其他数据类型)的大小C.我已经阅读它取决于机器/操作系统/编译器,但没有得到明确/详细的解释,比如什么覆盖了另一个等等.任何解释或指针都会非常有用.

Ste*_*non 14

最终编译器会这样做,但为了使编译的代码能够很好地与系统库一起使用,大多数编译器都会匹配用于构建目标系统的编译器的行为.

如此松散地说,大小int是目标硬件和操作系统的属性(同一硬件上的两个不同操作系统可能具有不同的大小int,并且在两台不同机器上运行的相同操作系统可能具有不同的大小int;有合理的两个常见的例子).

所有这些也受到C标准中的规则的约束. int例如,必须足够大以表示-32767和之间的所有值32767.

  • @KingsIndian:不,不是; C标准在这一点上非常明确.如果恰好使用16位2s补码表示,它将能够表示`-32768`,但这不是必需的. (3认同)

Che*_*Alf 5

int是平台的“自然”大小,实际上这意味着以下之一

  • 处理器的寄存器大小,或

  • 与现有代码库向后兼容的大小(例如intWin64 中的 32 位)。

编译器供应商可以自由选择具有 ≥ 16 个值位的任何大小,但(对于桌面平台及更高平台)与操作系统 API 不兼容的大小将意味着编译器的副本很少(如果有)出售。;-)