gpt4 book ai didi

java - 双整数值溢出

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:05:43 27 4
gpt4 key购买 nike

我试图理解我编写的用于实验计算溢出的代码的行为。

public static void main(String[] args) {

System.out.println(getSomeValue());
System.out.println(getFixedSomeValue());
}

private static double getSomeValue() {
return (2500000 - 0) * 250000 * (200 + 310);
}

private static double getFixedSomeValue() {
return (double) (2500000 - 0) * 250000 * (200 + 310);
}

输出:

-9.9787264E8
3.1875E14

我的理解是:可能是因为整数溢出:

Double.MAX_VALUE = 1.7976931348623157E308
Integer.MAX_VALUE = 2147483647

我不明白为什么值不同?当方法的返回类型为double时,它不应该自动将其转换为double吗?

最佳答案

(2500000 - 0) * 250000 * (200 + 310) 是由 int 文字和数字运算符组成的表达式,因此使用整数运算符和结果是 int,因此会溢出(因为它被限制为 Integer.MAX_VALUE)。溢出的结果在方法返回之前转换为 double,但为时已晚。

当你在开头添加 (double) 时,你将 (2500000 - 0) 转换为 double 并避免了数字溢出,因为现在所有运算符都是浮点运算符,它们会产生 double 值。这类似于写

return (2500000.0 - 0) * 250000 * (200 + 310)
^ decimal point = double literal rather than int

关于java - 双整数值溢出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50792212/

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