ホームページ  >  記事  >  Java  >  整数リテラルに「L」を追加すると乗算の結果が変わるのはなぜですか?

整数リテラルに「L」を追加すると乗算の結果が変わるのはなぜですか?

Linda Hamilton
Linda Hamiltonオリジナル
2024-11-07 09:53:02544ブラウズ

Why Does Adding 'L' to an Integer Literal Change Multiplication Results?

乗算演算の結果が異なるのはなぜですか?

提供されたコードでは、整数リテラルに文字「L」を追加します。この矛盾を理解するには、関連するデータ型を詳しく調べることが重要です。

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

oneyearWithL に割り当てられる値は、接尾語 "L" で示される long です。 Long は、整数と比較してより広い範囲の値を表すことができます。この場合、365 は Long とみなされ、それに前の整数値を乗算した結果も Long になります。

一方、oneyearWithoutL には整数値が割り当てられます。整数値を乗算すると整数が得られます。ただし、この式の値は 32 ビット整数の最大制限 (2^31 - 1) を超えています。したがって、代入中に、有効な整数の範囲内に収まるように切り捨てられ、誤った計算が行われます。

これをさらに説明するために、次の出力を考えてみましょう。

System.out.println(1000*60*60*24*365L);
System.out.println(1000*60*60*24*365);
System.out.println(Integer.MAX_VALUE);

出力:

31536000000
1471228928
2147483647

これは、「L」が含まれる場合、結果はlong データ型の範囲内にあり、したがって正確であることを示しています。ただし、「L」を省略すると、結果は整数に切り捨てられ、間違った値になります。

この問題を修正して正しい結果を得るには、oneyearWithoutL の乗算式を明示的に次のようにキャストする必要があります。 long using (long) または数値リテラルには、oneyearWithoutL = のように「L」接尾辞を追加する必要があります。 1000*60*60*24*365L.

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

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