C变量定义

时间:2013-07-09 22:17:15

标签: c

在C整数和短整数变量是相同的:范围从-32768到32767,并且两者的所需字节也相同,即2.

那么为什么需要两种不同的类型?

5 个答案:

答案 0 :(得分:6)

C语言中的基本整数类型没有严格定义的范围。它们仅具有语言标准指定的最小范围要求。这意味着您关于具有相同范围的intshort的断言通常是不正确的。

尽管intshort的最低范围要求相同,但在典型的现代实施中,int的范围通常大于short的范围

答案 1 :(得分:2)

标准只保证sizeof(short)< = sizeof(int)< = sizeof(long),据我记得。所以short和int都可以相同但不必。 32位编译器通常有2个字节短和4个字节int。

答案 2 :(得分:0)

intshort的保证最小范围相同。但是,一个实现可以自由地定义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,而是定义uint32int32或类似的东西,可用于尺寸重要的所有地方。

在很多代码中,变量的大小并不重要,因为数字在这样的范围内,几千个比你需要的更多 - 例如文件名中的字符数是由操作系统定义的,我不知道文件名/路径超过4K个字符的任何操作系统 - 所以16,32或64位的值至少可以达到32K非常适合计算它 - 它的大小并不重要 - 所以在这里我们应该使用int,而不是尝试使用特定的大小。 int在编译器中应该是一种“高效”的类型,因此应该有助于提供良好的性能,如果使用short,某些体系结构将运行得更慢,当然16位体系结构将运行使用long慢一点。

答案 4 :(得分:-1)

对于16位IBM兼容PC,它们都是相同的。但是,它不确定它在其他硬件上也是一样的。

VAX类型的系统,称为虚拟地址扩展,它们以不同的方式处理所有这两个变量。对于短整数,它占用2个字节,对于整数,它占用4个字节。

所以这就是我们有2个不同但相同的变量及其属性的原因。

对于台式机和笔记本电脑的一般用途,我们使用整数。