ホームページ  >  記事  >  Java  >  Java の乗算で 1 つのオペランドに「L」を追加すると結果が変わるのはなぜですか?

Java の乗算で 1 つのオペランドに「L」を追加すると結果が変わるのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-07 12:29:02740ブラウズ

Why does adding

「L」を使用した場合と使用しない場合で乗算結果が異なるのはなぜですか?

Java では、「L」を使用すると乗算演算で異なる結果が生成されます。いずれかのオペランドの接尾辞。

正しい Long 値を表すために "L" を追加します

"L" を追加すると、結果が Long 値になります。整数を乗算すると、結果も整数になります。結果が整数の範囲 (2147483647 ~ -2147483648) を超える場合、オーバーフローして負の値になります。

式の 365 に "L" を追加することで、long 値であることを明示的に指定します。これにより、他の整数と乗算した結果が Long 値になり、整数の範囲に切り捨てられなくなります。

「L」なし: 不正な整数の結果

「L」なしで整数を乗算すると、結果は整数になります。結果が整数の範囲を超える場合、「ラップアラウンド」して別の値になります。

たとえば、乗算 1000606024365 は " を追加しません。 L" は、誤った結果 1471228928 を返します。これは、結果 31536000000 が整数の範囲をオーバーフローし、-1702967296 (31536000000 の 2 の補数表現) になるためです。

バイナリ表現

2 つの結果のバイナリ表現は違いを示しています:

  • 1000606024365L: 011101010111101100010010110000000000
  • 10 00 606024365: 01111111111111111111111111111111

「L」を追加しないと、最上位 4 ビットが切り捨てられ、誤った表現になります。 10010110000000000、

その他の考慮事項

  • 乗算の結果が整数の範囲内の値になる場合、「L」を追加しても
  • 中間計算中にオーバーフローが発生する可能性があります。最終結果が整数の範囲に収まる場合でも、大きな値の算術演算を実行する場合はオーバーフローを考慮することが重要です。
  • 365L1000606024*30、整数範囲をオーバーフローする可能性のある乗算の正確性を保証します。

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

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