大きな数値による整数オーバーフロー
上記のコード スニペットは、指定された整数の最大の素因数 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 サイトの他の関連記事を参照してください。