long は 32 ビットであることが保証されていますか?
C 標準に基づく一般的な前提にもかかわらず、long は 32 ビットであることが保証されているのかという疑問が生じます。少なくとも 32 ビット。標準では、基本的な整数型を次のように分類しています。
sizeof(char) ≤ sizeof(short int) ≤ sizeof(int) ≤ sizeof(long int)
ただし、多くの人は、この階層に基づいて、long は 32 ビットでなければならないと想定しています。ただし、規格では、バイト内のビット数は実装で定義されると明示的に規定されています。
Alf P. Steinbach の主張
この一見矛盾しているにもかかわらず、Alf P. Steinbach は、long は 32 ビットであることが保証されると主張しました。彼はこの主張を、long が保持できる値の範囲 (LONG_MIN から LONG_MAX) に対する暗黙の制限に基づいています。
C 標準は C 標準 (18.3.2) を参照しており、次のように定義されています。
LONG_MIN ≤ -2^31 + 1 LONG_MAX ≥ 2^31 - 1
32 ビット表現への接続
これは長い範囲を確立しますが、明示的に 32 ビットを保証するものではありません。ただし、次の 2 つの可能性があります:
結論
C 標準では、long が 32 ビットであることを明示的に要求していませんが、最小範囲要件 (LONG_MIN から LONG_MAX) により、暗黙的にそれが必要になります。これは、これらの値を表現するには、32 ビットのストレージか、同等の値容量を持つ実装固有のメカニズムが必要になるためです。したがって、C は、long が少なくとも 32 ビットであることを保証すると結論付けることができます。
以上がC では「long」は少なくとも 32 ビットを持つことが保証されていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。