为啥 int 存在于 C 中,为啥不只是 short 和 long

Posted

技术标签:

【中文标题】为啥 int 存在于 C 中,为啥不只是 short 和 long【英文标题】:Why int exists in C, Why not just short and long为什么 int 存在于 C 中,为什么不只是 short 和 long 【发布时间】:2017-05-27 14:55:42 【问题描述】:

short 至少为 16 位,long 至少为 32 位,那么int 可以是 16 位还是 32 位有什么意义?

PS:我在这里说的是 ANSI C。

【问题讨论】:

int 是(在大多数情况下,这对于 8 位架构是不可能的)机器的自然字长,因此通常是最高性能的。在 IA32 上,32 位的整数运算确实比 16 位的性能更好。 视情况而定。也许尺寸是您更关心的问题?但是,根据经验,除了大小受限的系统:只要您需要至少 16 位的整数,请使用 int,但不要关心实际更大的大小。 请参阅section 6.3 here 和脚注 48。 顺便说一句,标准并没有说int只能是16位或32位,只是int至少是16位(并且不能大于long)跨度> 1. “正常”不代表不允许其他尺寸,只是这两个是最常见的。 2. K&R 不是标准 【参考方案1】:

shortintlong 根据定义是三个不同的类型说明符,其中,short int 的排名低于intint 的排名低于long int

C 标准仅指定最小和比较,例如,int 不能宽于long)要求,实现可以选择提供任何其他更广泛的类型定义,保持约束有效。

【讨论】:

以上是关于为啥 int 存在于 C 中,为啥不只是 short 和 long的主要内容,如果未能解决你的问题,请参考以下文章

java, short s=100; 可以。但是 int i=100; short s=i;就不行为啥?

为啥我的 C 函数不打印任何内容?

一次定义2个int类型局部变量,这两个局部变量的地址为啥相差12个字节?

为啥 Lambda 变量范围存在于 LINQ 查询之外?

C 中从 Float 到 Int 的类型转换导致数字大不相同,为啥?

为啥 unsigned int 不符合 CLS?