ホームページ > バックエンド開発 > C++ > For ループ内の大きな整数リテラルが予想とは異なる動作をするのはなぜですか?

For ループ内の大きな整数リテラルが予想とは異なる動作をするのはなぜですか?

Linda Hamilton
リリース: 2024-12-14 15:47:11
オリジナル
1000 人が閲覧しました

Why Do Large Integer Literals in For Loops Behave Differently Than Expected?

整数リテラルの型: デフォルトでは 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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート