在C整数和短整数变量是相同的:范围从-32768到32767,并且两者的所需字节也相同,即2.
那么为什么需要两种不同的类型?
答案 0 :(得分:6)
C语言中的基本整数类型没有严格定义的范围。它们仅具有语言标准指定的最小范围要求。这意味着您关于具有相同范围的int
和short
的断言通常是不正确的。
尽管int
和short
的最低范围要求相同,但在典型的现代实施中,int
的范围通常大于short
的范围
答案 1 :(得分:2)
标准只保证sizeof(short)< = sizeof(int)< = sizeof(long),据我记得。所以short和int都可以相同但不必。 32位编译器通常有2个字节短和4个字节int。
答案 2 :(得分:0)
int
和short
的保证最小范围相同。但是,一个实现可以自由地定义short
,其范围小于int
(只要它仍然满足最小值),这意味着它可能需要占用相同或更小的存储空间{ {1}} 1 。标准中提到int
:
''普通''
int
对象具有自然大小 执行环境的架构。
总而言之,这意味着(对于落在-32767到32767范围内的值),几乎在所有情况下,可移植代码都应该更喜欢int
。例外情况是存储大量值的情况,因此int
占用的可能较小的存储空间是一个考虑因素。
<小时/> 1。当然,病态实现可以自由地定义
short
,其字节大小比short
大,只要它仍然具有相同或更小的范围 - 没有充分的理由这样做,但是
答案 3 :(得分:0)
C ++标准(和C标准,它有一个非常相似的段落,但引用来自C ++ 11草案规范的n3337版本):
第3.9.1节,第2点:
有五种标准的有符号整数类型:“signed char”,“short int”,“int”,“long int”和“long” long int“。在此列表中,每种类型至少提供与列表中前面的存储一样多的存储空间。 也可能存在实现定义的扩展有符号整数类型。标准和扩展签名 整数类型统称为有符号整数类型。普通的锭子具有自然尺寸 执行环境的架构;提供其他有符号整数类型以满足特殊要求 需要。
不同的体系结构具有不同大小的“自然”整数,因此16位体系结构自然会计算出16位值,其中32位或64位体系结构将使用32位或64位int。它是编译器生成器(或者特定体系结构的ABI的定义者)的选择,它往往是由OS和该体系结构的“主”编译器生产者组合形成的决策。
在现代C和C ++中,有int32_t
行的类型保证正好是32位。这有助于实现便携性。如果这些类型不够(或者项目使用的是不那么现代的编译器),最好不要在需要特定精度/大小的数据结构或类型中使用int
,而是定义uint32
或int32
或类似的东西,可用于尺寸重要的所有地方。
在很多代码中,变量的大小并不重要,因为数字在这样的范围内,几千个比你需要的更多 - 例如文件名中的字符数是由操作系统定义的,我不知道文件名/路径超过4K个字符的任何操作系统 - 所以16,32或64位的值至少可以达到32K非常适合计算它 - 它的大小并不重要 - 所以在这里我们应该使用int
,而不是尝试使用特定的大小。 int
在编译器中应该是一种“高效”的类型,因此应该有助于提供良好的性能,如果使用short
,某些体系结构将运行得更慢,当然16位体系结构将运行使用long
慢一点。
答案 4 :(得分:-1)
对于16位IBM兼容PC,它们都是相同的。但是,它不确定它在其他硬件上也是一样的。
VAX类型的系统,称为虚拟地址扩展,它们以不同的方式处理所有这两个变量。对于短整数,它占用2个字节,对于整数,它占用4个字节。
所以这就是我们有2个不同但相同的变量及其属性的原因。
对于台式机和笔记本电脑的一般用途,我们使用整数。