16

我在不同的来源(例如维基百科: http ://en.wikipedia.org/wiki/C_variable_types_and_declarations#Size)中读过几次,在 C 中,long long 不小于 long,long 不小于比不小于短的 int。

但是,我在 C90 和 C99 标准中查找了这一点,并没有找到相应的条款。我发现只有 C90 和 C99 指定了最小类型大小(C90 和 C99 标准中的第 5.2.4.2.1 节),但没有指定它们之间的大小。我是否遗漏了标准中的某些内容?

4

3 回答 3

13

6.3.1.1 定义了任意两种整数类型的相对整数转换等级。这是一个抽象概念,仅用于定义两种类型之间的关系;没有任何值被定义为任何类型的等级

6.2.5p8 说:

对于任何两个具有相同符号和不同整数转换等级的整数类型(见 6.3.1.1),具有较小整数转换等级的类型的值范围是另一个类型的值的子范围。

它没有说明它们的相对大小,事实上,从理论上讲,符合(但故意反常)的实现可能具有sizeof (short) > sizeof (int). 仅当填充位short(对值没有贡献的位)比. 这不太可能;大多数实现根本没有填充位,而且我知道没有实现整数类型范围的关系与其大小关系不同的实现。int

参考:要么N1256,最新的 C99 草案,要么N1570,最新的 C2011 草案。

于 2012-05-27T14:32:25.043 回答
10

我假设 Wikipedia 文章指的是这些整数类型的值范围,而不是它们的大小(由 报告sizeof)。

来自C99 标准草案 N1256

6.3.1.1/1

的等级long long int应大于 的等级long int应大于 的等级int应大于 的等级short int应大于 的等级signed char

6.2.5/8

对于任何两个具有相同符号和不同整数转换等级的整数类型(见 6.3.1.1),具有较小整数转换等级的类型的值范围是另一个类型的值的子范围。

于 2012-05-27T13:53:22.253 回答
6

来自C2011 标准

6.3.1.1/1

long long int的rank 大于long int 的rank,long int的rank 大于int的rank,short int的rank 大于signed char的rank 。

于 2012-05-27T13:54:25.127 回答