ホームページ > Java > &#&チュートリアル > 600851475143 の素因数を見つけようとすると、Java コードが整数オーバーフローで失敗するのはなぜですか?

600851475143 の素因数を見つけようとすると、Java コードが整数オーバーフローで失敗するのはなぜですか?

Patricia Arquette
リリース: 2024-11-08 14:53:02
オリジナル
950 人が閲覧しました

Why Does My Java Code Fail with an Integer Overflow When Trying to Find Prime Factors of 600851475143?

大きな数値による整数オーバーフロー

上記のコード スニペットは、指定された整数の最大の素因数 600851475143 を見つけようとします。コードを実行すると、整数が大きすぎることを示すエラー メッセージが表示されて失敗します。

Java で大きな数値を扱う場合は、使用可能なデータ型とその制限に注意することが重要です。

整数

Java の整数は固定幅の値を使用して表されます。 32 ビット整数 (int 型) は、-2^31 ~ 2^31-1 (約 -20 億~20 億) の値を保持できます。 64 ビット整数 (long 型) は、-2^63 から 2^63-1 (約 -9 京から 9 京) の値を保持できます。

コード例では、指定された数値 600851475143 は超えています。 32 ビット整数の範囲。その結果、Java はリテラル値を 32 ビット整数として解釈し、誤って負の値に切り捨ててしまい、オーバーフロー エラーが発生します。

長いリテラル

リテラル値を 64 ビット整数として指定するには、接尾辞「L」を付ける必要があります。たとえば、600851475143L は、Java で必要な数値の有効な表現です。

改訂コード

リテラル値を 600851475143L に変更することで、オーバーフローの問題を修正でき、プログラムが正常に実行されました。

...
        obj.function(600851475143L);
...
ログイン後にコピー

以上が600851475143 の素因数を見つけようとすると、Java コードが整数オーバーフローで失敗するのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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