首页  >  文章  >  Java  >  为什么在 Java 中向数值添加“L”会极大地改变乘法运算的结果?

为什么在 Java 中向数值添加“L”会极大地改变乘法运算的结果?

Patricia Arquette
Patricia Arquette原创
2024-11-07 04:43:02347浏览

Why does adding an

理解数值差异

在提供的代码片段中,两个乘法运算之间的明显差异源于缺少或存在附加到数值后的“L”字符:

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

附加“L”以确保长值

在第一个表达式中,“L”后缀表示长整型文字,表示该值应被视为 64 位整数。此乘法的结果是每年 31536000000 毫秒的长值。

缺少“L”会导致整数值

在第二个表达式中,没有“ L”后缀,乘法运算产生一个整数值。在这种情况下,结果是 1471228928,而预期值应超过 30 亿毫秒。

整数溢出和截断

出现差异是因为四乘的结果32 位整数(1000、60、60 和 24)除以第五个 32 位整数 (365) 超出了整数范围,即 [-2^31, 2^31-1]。结果回绕,在第二个表达式中产生错误值 1471228928。

转换为 2 的补码表示

在没有“L”后缀的情况下,如果整数相乘的结果为负且超出整数范围,则在分配给整型变量之前将其转换为 2 的补码表示形式。此转换确保负值可以在整数范围内表示。

确保正确的结果

要获得正确的结果,必须声明数值通过附加“L”来超出整数范围的长整型值,以确保正确的表示并避免截断或转换为 2 的补码表示。

以上是为什么在 Java 中向数值添加“L”会极大地改变乘法运算的结果?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn