ホームページ  >  記事  >  Java  >  長い値の場合、乗算演算に接尾辞 "L" を追加することが重要なのはなぜですか?

長い値の場合、乗算演算に接尾辞 "L" を追加することが重要なのはなぜですか?

Susan Sarandon
Susan Sarandonオリジナル
2024-11-07 07:21:02710ブラウズ

Why Does Adding an

「L」接尾辞がある場合とない場合で乗算演算の結果が異なるのはなぜですか?

長い値を含む数値を乗算する場合、「L」を追加すると" 数値リテラルの接尾辞は、正確な結果を得るために重要です。これは、数値リテラルのデフォルトのデータ型が int であり、long よりも範囲が狭く、整数オーバーフローが発生する可能性があるためです。

"L" 接尾辞が付いた Long 値

long oneYearWithL = 1000*60*60*24*365L;
  • リテラル 1000*60*60*24*365L は、「L」接尾辞を使用して明示的に long にキャストされ、結果が 64 ビットの long 値として格納されるようになります。この値は、1 年の秒数を正確に表します。

接尾辞「L」のない長い値

long oneYearWithoutL = 1000*60*60*24*365;
  • 数値リテラル 1000 *60*60*24*365 は、「L」接尾辞が存在しないため、暗黙的に int にキャストされます。結果は 32 ビット整数ですが、値が int の範囲外であるためオーバーフローします。このオーバーフローにより、不正な計算が発生します。

バイナリ表現

2 つの値の違いは、バイナリ表現で確認できます。

oneYearWithL  : 011101010111101100010010110000000000
oneYearWithoutL: 01111111111111111111111111111111

oneyearWithL の最上位ビットの「1」は正の値を示し、oneyearWithoutL の最上位ビットの「0」は負の値となるオーバーフローを示します。

結論

long 値を含む数値を乗算する場合、接尾辞 "L" を明示的に使用すると、結果が 64 ビットの long 値として正確に格納されます。 「L」接尾辞の追加を怠ると、整数オーバーフローによる誤った計算が発生する可能性があります。

以上が長い値の場合、乗算演算に接尾辞 "L" を追加することが重要なのはなぜですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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