ホームページ  >  記事  >  バックエンド開発  >  C では「long」は少なくとも 32 ビットを持つことが保証されていますか?

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

Barbara Streisand
Barbara Streisandオリジナル
2024-10-26 17:39:30979ブラウズ

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 ビット表現への接続

これは長い範囲を確立しますが、明示的に 32 ビットを保証するものではありません。ただし、次の 2 つの可能性があります:

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

結論

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

以上がC では「long」は少なくとも 32 ビットを持つことが保証されていますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。