gpt4 book ai didi

java - 如何防止Java代码中的整数溢出?

转载 作者:IT老高 更新时间:2023-10-28 21:08:01 28 4
gpt4 key购买 nike

Possible Duplicate:
How can I check if multiplying two numbers in Java will cause an overflow?

假设我有一个 Java 类方法,它使用 *+ 操作。

int foo(int a, int b) {  ... // some calculations with + and * }

如何确保foo中没有溢出?

我想我可以使用 BigDecimal 或将所有 + 和 * 替换为“包装器”,例如:

int sum(int a, int b) {   int c = a + b;   if (a > 0 && b > 0 && c < 0)      throw new MyOverfowException(a, b)   return c;}int prod(int a, int b) {   int c = a * b;   if (a > 0 && b > 0 && c < 0)      throw new MyOverfowException(a, b)   return c;}

有没有更好的方法来确保 Java 方法中不会发生 int 溢出?

最佳答案

检查溢出的一种方法是将操作数提升为更大的类型(原始操作数位长度的两倍)然后执行操作,然后查看结果值是否对于原始类型来说太大,例如

int sum(int a, int b) {
long r = (long)a + b;
if (r >>> 32 != 0) { // no sign extension
throw new MyOverflowException(a, b);
}
return (int)r;
}

如果您的原始类型是 long,则必须使用 BigInteger 作为较大的类型。

关于java - 如何防止Java代码中的整数溢出?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12226634/

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