ホームページ > バックエンド開発 > C++ > C で整数の乗算がオーバーフローを引き起こすのはなぜですか?

C で整数の乗算がオーバーフローを引き起こすのはなぜですか?

Susan Sarandon
リリース: 2024-11-11 15:12:03
オリジナル
1024 人が閲覧しました

Why Does Integer Multiplication Lead to Overflow in C  ?

整数オーバーフロー: 乗算が惨事につながる場合

C では、潜在的なオーバーフローを回避するために整数のサイズと型を理解することが不可欠です。次のコード スニペットを調べてみましょう:

long long int n = 2000*2000*2000*2000;    // overflow

long long int n = pow(2000,4);            // works
long long int n = 16000000000000;         // works
ログイン後にコピー

他の 2 行は問題なく動作するのに、なぜ最初の行はオーバーフローを引き起こすのでしょうか?

原因は C による整数リテラルの処理方法にあり、算術演算。デフォルトでは、整数リテラルは、値を保持できる最小の型ですが、int より小さくはありません。この場合、2000 は int で、通常は 32 ビット型です。

算術演算を実行するとき、コンパイラはオペランドの型に基づいた特定の規則に従います。このシナリオでは、乗算は関係する型のうち大きい方の int を使用して行われます。ただし、C は宛先に基づいて型を推論しないため、代入は無関係です。

int の容量を超える乗算の結果は int として格納され、オーバーフローが発生します。最初の行ではオーバーフローが発生するのに、他の 2 行ではオーバーフローが発生しないのはこのためです。

この問題を解決するには、サフィックス LL (または ll) を追加することで、最初の行で使用される定数の型を明示的に指定できます。 )。これにより、リテラルが long long int として扱われるようになり、オーバーフローが防止されます。

C で整数型と算術演算がどのように機能するかを理解することで、潜在的な落とし穴を回避し、コードでデータ操作を正しく処理できるようになります。

以上がC で整数の乗算がオーバーフローを引き起こすのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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