16

私はさまざまな情報源(例:ウィキペディア: http: //en.wikipedia.org/wiki/C_variable_types_and_declarations#Size)で数回読んだことがありますが、Cではlonglongはlongよりも小さくありません。ショートより小さくないintより。

ただし、これをC90およびC99標準で調べたところ、対応する句が見つかりませんでした。私は、C90とC99が最小タイプサイズ(C90とC99標準のセクション5.2.4.2.1)を指定していることだけを見つけましたが、相互のサイズは指定していません。私は基準の何かを逃したことがありますか?

4

3 に答える 3

13

6.3.1.1 は、任意の 2 つの整数型の相対的な整数変換ランクを定義します。これは、2 つの型の間の関係を定義するためだけの抽象的な概念です。どのタイプのランクとして定義された値もありません。

6.2.5p8 言います:

符号が同じで整数変換ランクが異なる 2 つの整数型 (6.3.1.1 を参照) の場合、整数変換ランクが小さい方の値の範囲は、他の型の値の部分範囲になります。

それらの相対的なサイズについては何も述べていません。実際、理論的には、準拠している(ただし意図的にひねくれた)実装が を持つことは可能sizeof (short) > sizeof (int)です。これは、パディング ビット(値に寄与しないビット)shortが よりも多い場合にのみ可能です。これはほとんどありません。ほとんどの実装にはパディング ビットがまったくありません。また、整数型の範囲の関係がサイズの関係と異なる実装を私は知りません。int

参照: N1256、最新の C99 ドラフト、またはN1570、最新の C2011 ドラフト。

于 2012-05-27T14:32:25.043 に答える
10

ウィキペディアの記事は、整数型のサイズではなく、整数型の値の範囲を参照していると思います(報告によると)。sizeof

C99 標準ドラフト N1256から:

6.3.1.1/1

のランクは のランクlong long intよりも大きく、 のランクよりもlong int大きく、intのランクよりもshort int大きくなり、 のランクよりも大きくなりますsigned char

6.2.5/8

符号が同じで整数変換ランクが異なる 2 つの整数型 (6.3.1.1 を参照) の場合、整数変換ランクが小さい方の値の範囲は、他の型の値のサブ範囲になります。

于 2012-05-27T13:53:22.253 に答える
6

C2011規格から

6.3.1.1/1

long long intのランクはlong intのランクよりも大きくなければならず、これはintのランクよりも大きくなければならず、これはshort intのランクよりも大きくなければならず、それはsigned charのランクよりも大きくなければならない.

于 2012-05-27T13:54:25.127 に答える