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 ビット表現への接続
これにより、long の範囲が確立されますが、明示的に 32 ビットが保証されるわけではありません。ただし、次の 2 つの可能性があります:
結論
C 標準では、long が 32 ビットであることを明示的に要求していませんが、最小範囲要件 (LONG_MIN ~ LONG_MAX) により、暗黙的にそれが必要になります。これは、これらの値を表現するには、32 ビットのストレージか、同等の値容量を持つ実装固有のメカニズムが必要になるためです。したがって、C は、long が少なくとも 32 ビットであることを保証すると結論付けることができます。
免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。
Copyright© 2022 湘ICP备2022001581号-3