我在不同来源阅读了几次(例如维基百科:http://en.wikipedia.org/wiki/C_variable_types_and_declarations#Size),在C中,long long不小于long,不小于int,不是小于短。
但是,我已经在C90和C99标准中查明了这一点,并且没有找到相应的条款。我发现只有C90和C99规定了最小型号(C90和C99标准中的第5.2.4.2.1节),而不是它们相互之间的尺寸。我是否错过了标准中的某些内容?
答案 0 :(得分:13)
6.3.1.1定义任意两种整数类型的相对整数转换等级。这是一个抽象概念,仅用于定义两种类型之间的关系;没有任何值被定义为任何类型的 rank 。
6.2.5p8说:
对于具有相同签名和不同的任何两个整数类型 整数转换等级(见6.3.1.1),类型的值范围 具有较小整数转换等级是值的子范围 另一种。
它没有说明它们的相对尺寸,事实上,理论上可以使符合(但故意不正常)的实现具有sizeof (short) > sizeof (int)
。仅当short
具有比int
更多的填充位(对该值没有贡献的位)时,才有可能实现此目的。这是不太可能的;大多数实现根本没有填充位,我知道没有实现整数类型范围的关系与它们的大小关系不同。
答案 1 :(得分:10)
我认为维基百科文章指的是那些整数类型的值范围,而不是 size (由sizeof
报告)。< / p>
<强> 6.3.1.1/1 强>
long long int
的等级应大于long int
的等级 应大于int
的等级,该等级应大于short int
的等级,该等级应大于signed char
的等级。
<强> 6.2.5 / 8 强>
对于具有相同签名和不同整数转换等级的任何两个整数类型 (见6.3.1.1),具有较小整数转换等级的类型的值范围是a 另一种类型的值的子范围。
答案 2 :(得分:6)
6.3.1.1/1
- long long int 的排名应大于 long int 的排名, 应大于 int 的等级,该等级应大于 short的等级 int ,应大于 signed char 的等级。