为什么乘法运算会产生不同的结果?
在提供的代码中,结果的差异是由于存在或不存在字母“L”附加到整数文字上。要理解这种差异,深入研究所涉及的数据类型非常重要:
long oneYearWithL = 1000*60*60*24*365L; long oneYearWithoutL = 1000*60*60*24*365;
分配给 oneYearWithL 的值是一个 long,由“L”后缀表示。与整数相比,长整型可以表示更大范围的值。在这种情况下,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) 或数字文字应添加“L”后缀,例如 oneYearWithoutL = 1000*60*60*24*365L。
以上是为什么将'L”添加到整数文字会改变乘法结果?的详细内容。更多信息请关注PHP中文网其他相关文章!