为什么short / int / long中有一个额外的整数类型?

时间:2016-05-16 14:55:19

标签: c integer standards

直到最近,我相信“长期”。和' int'是一回事。由于历史原因和桌面处理器都至少有32位(并且只有#34; dupe"因为只在32位机器上开发)。

阅读this,我发现,实际上,C标准将int类型定义为至少一个int16,而#39; long'应该至少是一个int32。

实际上在列表中

  • 短签名整数类型。能够至少包含[-32767,+ 32767]范围
  • 基本有符号整数类型。能够至少包含[-32767,+ 32767]范围;
  • 长签名整数类型。能够至少包含[-2147483647,+ 2147483647]范围
  • 长签名整数类型。能够至少包含[-9223372036854775807,+ 9223372036854775807]范围;

总是存在非空交叉点,因此无论编译器和平台选择何种实现,都会出现重复。

为什么标准委员会在char / short / int / long(或int_k,int_2k,int_4k,int_8k)之类的简单引入了额外的类型?

这是出于历史原因,例如,gcc x.x将int实现为32位而另一个编译器将其实现为16,或者是否存在我缺少的真正技术原因?

1 个答案:

答案 0 :(得分:6)

中心点是char, short,int, long, long long不仅仅是来自int阶梯的整数大小的另一步。 int很特别。所有较窄的类型都提升到 大小,因此通常可以正常工作" best"在给定的处理器上。因此,short匹配longshort/long或明确地在B之间进行楔入是高度依赖平台的。

C旨在容纳系列处理器。鉴于C已有40多年的历史,这是成功战略的证明。