ホームページ >バックエンド開発 >C++ >C および C で大きすぎる整数リテラルがデフォルトで「int」にならない場合があるのはなぜですか?

C および C で大きすぎる整数リテラルがデフォルトで「int」にならない場合があるのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-12-07 17:47:14482ブラウズ

Why Do Excessively Large Integer Literals in C and C   Sometimes Not Default to `int`?

整数リテラル: デフォルトでは必ずしも Int ではない

ループ内で反復する際、大きすぎる整数リテラルは予期しない問題を引き起こす可能性があります。通常、接尾辞のないリテラルは int として解釈されます。ただし、この仮定は非常に大きな値には当てはまらない可能性があります。

オーバーフローとプロモーション

整数リテラルが int (通常は 32 ビット) の範囲を超える場合、未定義動作 (UB) が発生する可能性があります。ただし、場合によっては、コンパイラがリテラルを、long int (通常は 64 ビット) などのより大きな型に自動的に昇格することがあります。

標準仕様

C と C 標準の両方で、整数リテラルの適切な昇格を規制しています。 types.

  • C: C99 標準のセクション 6.4.4.1 では、リテラル型がその値を表現できる最初のリストであると述べられています (つまり、int、long int) 、long long int)、または必要に応じて拡張整数型。
  • C : C 11 標準のセクション [lex.icon] ¶2 でも、同様に、必要に応じて、long int または long long int への昇格が指定されています。

Example

整数リテラル 10000000000 を考えてみましょう。C 環境では、これは次のようになります。 long int として解釈されます。ただし、使用されているコンパイラが 32 ビット コンパイラである場合、リテラルが使用可能な整数型に対して大きすぎるため、コンパイル エラーが発生する可能性があります。

以上がC および C で大きすぎる整数リテラルがデフォルトで「int」にならない場合があるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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