乗算演算の結果が異なるのはなぜですか?
提供されたコードでは、整数リテラルに文字「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 サイトの他の関連記事を参照してください。