直到最近,我认为'long'与'int'是一回事,因为历史原因和台式机处理器都至少有32位(并且只有那种“欺骗”才有麻烦,因为它只在32位机器上开发) .
阅读this,我发现,事实上,C标准将int类型定义为 at least 为int16,而'long'应该至少为int32 .
实际上在列表中
-
短符号整数类型 . 能够至少包含[-32767,32767]范围
-
基本有符号整数类型 . 能够至少包含[-32767,32767]范围;
-
长签名整数类型 . 能够至少包含[-2147483647,2147483647]范围
-
长long有符号整数类型 . 能够至少包含[-9223372036854775807,9223372036854775807]范围;
总是存在非空交叉点,因此无论编译器和平台选择何种实现,都是重复的 .
为什么标准委员会在char / short / int / long(或int_k,int_2k,int_4k,int_8k)之类的内容中引入了额外的类型?
这是出于历史原因,例如,gcc x.x将int实现为32位而另一个编译器将其实现为16,或者是否存在我缺少的真正技术原因?
1 回答
中心点是
int/unsigned
不仅仅是来自char, short,int, long, long long
阶梯的整数大小的另一步 .int
很特别 . 它是 the 大小,所有较窄的类型都提升到,因此通常在给定的处理器上工作"best" . 所以int
匹配short
,long
或者在short/long
之间明显地楔入是高度依赖平台的 .C旨在适应各种处理器 . 鉴于C是40岁,证明了成功的战略 .