有许多问题要求C ++中的short
和int
整数类型之间存在差异,但实际上,您何时选择short
而不是int
?
答案 0 :(得分:35)
(有关详细说明,请参阅Eric's answer)
备注:强>
int
设置为'自然大小' - 硬件最有效处理的整数形式short
时,short
整数将转换为int
,因此这会对处理short
的速度产生影响}整数short
可以节省内存,如果它比int
更窄,这在使用大型数组时很重要int
系统相比,您的程序将在32位int
系统中使用更多内存<强>结论:强>
int
除非您节省内存至关重要,否则您的程序会占用大量内存(例如许多阵列)。在这种情况下,请使用short
。答案 1 :(得分:16)
在以下情况下选择short
而不是int
无论
int
或short
精确指定大小的类型,这些类型可能因平台而异(因为您需要具有32位{{1的平台能够读取使用16位short
)在平台上编写的文件。好的候选人是stdint.h中定义的类型。和
short
中存储任何无法存储的值(对于16位short
,这是{{ 1}} - short
或-32768
- 32767
代表16位0
)。65535
的内存少于unsigned short
的内存。该标准仅保证short
不大于而不是int
,因此允许实现short
和{{1}的大小相同}。注意:强>
int
也可以用作算术类型。回答“我应该何时使用short
代替int
或char
?”,其阅读方式与此类似,但数字不同({{ 1}} - char
代表8位short
,int
- -128
代表8位127
)
实际上,您可能实际上并不想特别使用char
类型。如果你想要一个特定大小的整数,那么应该首选defined in <cstdint>
类型,例如,0
在每个系统上都是16位,而你不能保证{的大小{ {1}}将为您的代码编译的所有目标提供相同的内容。
答案 2 :(得分:7)
一般情况下,您不希望short
超过int
。
int类型是处理器的原生单词大小
通常,int
是处理程序的字大小。
例如,对于32位字长处理器,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
。
答案 3 :(得分:0)
如果您的架构没有任何特定限制,我会说您可以随时使用int
。类型short
适用于内存是宝贵资源的特定系统。