数値の不一致を理解する
提供されたコード スニペットでは、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 サイトの他の関連記事を参照してください。