Java の乗算結果とデータ型について
Java では、乗算演算の結果はオペランドのデータ型によって異なります。これは、次のコード例に示すように、大きな値を乗算する場合に特に顕著です。
long oneYearWithL = 1000 * 60 * 60 * 24 * 365L; long oneYearWithoutL = 1000 * 60 * 60 * 24 * 365; System.out.println(oneYearWithL); // Output: 31536000000 System.out.println(oneYearWithoutL); // Output: 1471228928
説明:
整数オーバーフローについて:
Java では、整数-2,147,483,648 ~ 2,147,483,647 の範囲の符号付き 32 ビット値です。算術演算の結果がこれらの境界を超えると、範囲の反対側に回り込み、整数オーバーフローが発生します。
この例では、1000 を乗算した結果 60 60 24 365 は 2,592,000,000 です。この値は最大整数値を超えているため、-1,702,967,297 にラップアラウンドされ、出力 (1,471,228,928) として表示されます。
Long データ型への変換:
整数のオーバーフローを防ぐために、大規模な数値計算にはlongデータ型を使用することを常にお勧めします。数値の後に「L」を明示的に指定することで、Java に値を長整数として扱うように強制でき、結果が 64 ビット長の変数に確実に格納されます。
ベスト プラクティス:
以上がJava で大きな数値を扱うときに乗算で予期しない結果が生じるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。