サフィックスのない整数: 必要に応じてより大きな型に昇格
元のクエリでは、100 億までの反復で予期しない動作が発生する理由を調査しました。 1 つの疑惑は、サフィックスのない整数リテラルがデフォルトで通常の int 型にならないのではないかということでした。
C と C の両方で、そのようなリテラルは自動的に適合する整数型に昇格されます。これにより、使用可能な整数型の少なくとも 1 つの制限内で値を表現できることが保証されます。
C および C 標準
C 11 標準に従って ( [lex.icon] ¶2) および C99 標準 (§6.4.4.1)、 suffix には、その値を収容できる次のリストから最小の型が与えられます:
100億の場合、この整数定数はlong int (longの場合はlong long int)として分類されます。 int は 32 ビットとして定義されています)。
大きすぎるリテラルのコンパイル エラー
C99 と C 11 の両方で、リテラルがすべての許容される整数の表現可能な範囲を超えていると記載されています。型を指定するとコンパイル エラーが発生します。ただし、一部のコンパイラは、余分な桁を暗黙的に切り詰めたり破棄したりするなど、非標準的な方法でこれを処理する場合があります。
以上がC および C の符号なし整数リテラルがより大きな型に昇格するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。