C中"short int"和"int"有什么区别?

Kan*_*ngh 21 c types

C中的short int(或short)和int有何不同?它们具有相同的尺寸和范围.如果它们基本相同,那么有两种数据类型有什么用?

MBy*_*ByD 24

它们可能具有相同的大小,但保证int等于或大于short int.

  • 实际上保证的是`short int`的*ranges*至少是-32767 .. + 32767,而`short int`的范围是`int`范围的子集.由此得出,"short int"和"int"都至少为16位.由于填充位,理论上可以使用`sizeof(short int)> sizeof(int)`,但这种可能性很小. (4认同)
  • @icepack:整数类型可以具有填充位,这些填充位对值无贡献。例如,一个符合标准的实现在理论上可以具有32位的“短”(其中16个填充位)和24位的“ int”(均有效)。我想不出任何理由做这种愚蠢的事情,但是标准并没有禁止它。 (2认同)

Lun*_*din 21

理论上/通过C标准,它们可以是任何大小的short <= int.

在现实世界中,这就是尺寸的实现方式.

CPU             short   int
8 bit           16      16
16 bit          16      16
32 bit          16      32
64 bit          16      32
Run Code Online (Sandbox Code Playgroud)

  • @BharatSharma 64位只对"long"和"long long"的大小产生影响.显然,一些64位系统定义长达64位,而其他系统实现C99/C11标准并使用"long long"64位,将"long"保留为32位. (2认同)
  • 它们不能是任何大小。两者都必须至少为16位。顺便说一句,我曾经在32位(Cray T3E)和64位(Cray T90)“ short”系统上工作。 (2认同)

Rob*_*Dee 6

切勿依赖 C 中给定大小的数据类型。如果有疑问,请务必检查 limit.h 中的边界。

  • 当然,除非您使用“uint32_t”和“&lt;stdint.h&gt;”中的朋友。 (3认同)