「労働者が自分の仕事をうまくやりたいなら、まず自分の道具を研ぎ澄まさなければなりません。」 - 孔子、「論語。陸霊公」
表紙 > プログラミング > C++ では「long」は少なくとも 32 ビットであることが保証されていますか?

C++ では「long」は少なくとも 32 ビットであることが保証されていますか?

2024 年 11 月 7 日に公開
ブラウズ:448

Is `long` Guaranteed to Have at Least 32 Bits in C  ?

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 つの可能性があります:

  1. 2 の補数表現:
    負の数が 2 の補数で表現される場合、LONG_MIN または LONG_MAX の格納には 32 ビットが必要です。
  2. 明示的な符号ビット:
    負の数に符号ビットが使用される場合でも、合計ストレージには 32 ビットが必要です。

結論

C 標準では、long が 32 ビットであることを明示的に要求していませんが、最小範囲要件 (LONG_MIN ~ LONG_MAX) により、暗黙的にそれが必要になります。これは、これらの値を表現するには、32 ビットのストレージか、同等の値容量を持つ実装固有のメカニズムが必要になるためです。したがって、C は、long が少なくとも 32 ビットであることを保証すると結論付けることができます。

最新のチュートリアル もっと>

免責事項: 提供されるすべてのリソースの一部はインターネットからのものです。お客様の著作権またはその他の権利および利益の侵害がある場合は、詳細な理由を説明し、著作権または権利および利益の証拠を提出して、電子メール [email protected] に送信してください。 できるだけ早く対応させていただきます。

Copyright© 2022 湘ICP备2022001581号-3