整数リテラルの型: デフォルトでは Int ではありません?
質問:
なぜ最大 100 億を反復する for ループは、最大 1 を反復するループよりも時間がかかります。 10 億?
答え:
ループ内の反復変数は 32 ビットでオーバーフローし、無限ループを引き起こします。 100 億を表すリテラルは、L 接尾辞がないにもかかわらず、コンパイラーによって自動的に適合範囲 (この場合は少なくとも 64 ビット) に昇格されます。
C :
C 11 標準 ([lex.icon] ¶2) によれば、整数の型は接尾辞のないリテラルは、その値を表すことができる表 6 の最初のリテラルです:
Type |
---|
int |
long int |
long long int |
したがって、この場合、リテラルは long int または long long int (long int の場合) として解釈されます。 32 ビット).
C:
C99 ([§6.4.4.1])、ルールは同様です。整数定数の型は、その値を表現できる同様のリストの最初の型によって決定されます。
実装定義の型:
両方 C 11 ( [lex.icon] ¶3) および C99 ([§6.4.4.1 ¶5]) では整数が許可されます他に有効な型が見つからない場合、リテラルは「拡張整数型」 (実装固有の整数型) になります。
以上がFor ループ内の大きな整数リテラルが予想とは異なる動作をするのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。