有许多问题询问C++中short
和int
整数类型的区别,但实际上,在什么情况下选择short
而不是int
呢?
(详见 Eric的回答,有更详细的解释)
注:
int
被设置为“自然大小”——硬件最高效处理的整数形式。short
时,会将其转换为 int
,这可能会降低处理 short
整数的速度。short
比 int
更窄,则使用 short
可以节省内存,这在使用大型数组时非常重要。int
系统中,与 16 位 int
系统相比,程序将使用更多的内存。结论:
int
。在这种情况下,请使用 short
。当你:
要减小所存储的值的内存占用(例如,如果你针对低内存平台),
int
或short
,因为它们可能因平台而异(例如,你需要使用一个具有32位short
的平台来读取在具有16位short
的平台上编写的文件)。好的候选类型是stdint.h中定义的类型。并且:
short
中的任何值(对于16位short
,这是-32768
-32767
,或者对于16位unsigned short
是0
-65535
)。short
使用的内存比使用int
少。标准仅保证short
不大于int
,因此实现允许对于short
和int
具有相同的大小。注意:
char
也可用作算术类型。回答“何时应该使用char
而不是short
或int
?”的问题,读者会发现如下所述,但数字不同(对于8位char
,-128
-127
,对于8位unsigned char
,0
-255
)。
实际上,您可能并不需要特定的short
类型。如果您想要一个特定大小的整数,则应优先考虑在 & lt; cstdint & gt;
中定义的类型,例如,
int16_t
将在每个系统上都为16位,而无法保证short
的大小在编译代码的所有目标平台上都相同。
short
的范围条件。在某些编译器和平台上,short
与int
相同,这意味着当你想要16位时,你得到的是32位。请参见stdint.h
中的uint16_t
和uint32_t
数据类型。 - Thomas Matthewsshort
而非 int
。
int 类型是处理器本地的字长int
是处理器的字长大小。int
将是 32 位。处理器使用 32 位最有效率。假设 short
是 16 位,则处理器仍从内存中提取 32 位。这里没有效率;实际上更长了,因为处理器可能必须将位移位以便放置在 32 位字中的正确位置。
选择较小的数据类型uint16_t
。这些比起含糊不清的数据类型如 char, short,
和 int
更为受欢迎。这些宽度特定的数据类型通常用于访问硬件或压缩空间(例如消息协议)。
选择较小的范围short
数据类型基于范围而非位宽。在 32 位系统上,short
和 int
可能具有相同的 32 位长度。short
的原因之一是值永远不会超过给定范围。这通常是一种错误,因为程序会改变,数据类型可能会溢出。
总结short
。当我访问16位硬件设备时,我使用uint16_t
。对于数量和循环索引等,我使用unsigned int
。当数据存储时需要考虑大小时,我使用uint8_t
、uint16_t
和uint32_t
。由于short
是最小值,因此它在数据存储方面存在歧义。有了stdint
头文件的出现,就不再需要使用short
了。如果你的架构没有特定的限制,我会建议你始终使用 int
。类型 short
是为特定系统设计的,其中内存是宝贵的资源。
short
类型实际上使用的内存比int
类型少,这是由具体实现决定的。 - clctoshort
仅仅是因为它比较小的模糊概念既有风险(可能太小),也不可靠(可能没有达到你所期望的最小值)。当你对内存使用非常关注以至于要偏离int
时,我建议只需使用适当的X
的[u]intX_t
即可。 - user395760short
(或long
或char
或其他类型)时,大多数情况下是因为你甚至没有有意识地设置一个基于现实(或现实的背面版本)的限制,你只是通过引入一个基于平台的、任意的限制来“节省”未知数量的内存,这个限制是基于直觉的。 - user395760