ホームページ  >  記事  >  Java  >  Java で数値に「L」を追加すると、乗算演算の結果が大幅に変わるのはなぜですか?

Java で数値に「L」を追加すると、乗算演算の結果が大幅に変わるのはなぜですか?

Patricia Arquette
Patricia Arquetteオリジナル
2024-11-07 04:43:02347ブラウズ

Why does adding an

数値の不一致を理解する

提供されたコード スニペットでは、2 つの乗算演算間の明らかな不一致は、数値に追加される "L" 文字:

long oneYearWithL = 1000*60*60*24*365L;
long oneYearWithoutL = 1000*60*60*24*365;

長い値を保証するために "L" を追加

最初の式では、接尾辞 "L" が使用されます。は長整数リテラルを示し、値が 64 ビット整数として扱われる必要があることを示します。この乗算の結果は、1 年あたり 31536000000 ミリ秒の Long 値になります。

「L」がない場合、結果は整数値になります

2 番目の式では、" がありません。 L" 接尾辞を付けると、乗算演算により整数値が生成されます。この場合、期待値が 30 億ミリ秒を超えるはずの結果は 1471228928 になります。

整数のオーバーフローと切り捨て

4 を乗算した結果が一致しないため、矛盾が発生します。 32 ビット整数 (1000、60、60、および 24) と 5 番目の 32 ビット整数 (365) は、整数の範囲 [-2^31, 2^31-1] を超えます。結果は折り返され、2 番目の式で誤った値 1471228928 が生成されます。

2 の補数表現への変換

「L」接尾辞がない場合、整数を乗算した結果が負であり、整数の範囲を超えている場合は、整数変数に代入される前に 2 の補数表現に変換されます。この変換により、負の値が整数の範囲内で表現できることが保証されます。

正しい結果を保証する

正しい結果を得るには、数値を宣言することが不可欠です適切な表現を確保し、切り捨てや 2 の補数表現への変換を避けるために、「L」を追加することで整数の範囲を超えるロング値を指定します。

以上がJava で数値に「L」を追加すると、乗算演算の結果が大幅に変わるのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。