gpt4 book ai didi

java - 乘法发生溢出

转载 作者:太空狗 更新时间:2023-10-29 22:36:20 24 4
gpt4 key购买 nike

long m = 24 * 60 * 60 * 1000 * 1000;

上面的代码造成了溢出并且没有打印出正确的结果。

long m2 = 24L * 60 * 60 * 1000 * 1000;
long m3 = 24 * 60 * 60 * 1000 * 1000L;

以上两行打印出正确的结果。

我的问题是-

  1. m2m3 对我使用的编译器有影响吗?
  2. java 是如何开始繁殖的?从左到右还是从右到左?是先计算 24*60 还是先计算 1000*1000?

最佳答案

在这种情况下——

long m = 24 * 60 * 60 * 1000 * 1000;  

赋值权先求值。右边没有long类型的数据。都是int。因此 JVM 尝试将结果放入 int 中,然后发生溢出。

在第二种情况下——

long m2 = 24L * 60 * 60 * 1000 * 1000;
long m3 = 24 * 60 * 60 * 1000 * 1000L;

这里乘法的一个操作数是long。所以其他人会自动提示long。结果试图适应 long。最后,使用 m2m3 完成分配。

是的,乘法的结合性从左到右 - 意味着先取左操作数。基于这个事实,我认为在这种情况下我们应该使用 -

long m2 = 24L * 60 * 60 * 1000 * 1000;  

这个语句,因为在这个语句中,对 long 的提升发生得更早,这降低了溢出的风险。

关于java - 乘法发生溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30606365/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com