编程语言
首页 > 编程语言> > java – 如何在32位int上检测整数溢出?

java – 如何在32位int上检测整数溢出?

作者:互联网

我知道这样的话题被问过好几次,但我的问题是关于整个32位int的溢出.例如:

  11111111111111111111111111111111 +
  00000000000000000000000000000001 =
  00000000000000000000000000000000   //overflow!

我发现topic有类似的问题,但算法并不完美.

  11111111111111111111111111111111 +
  00000000000000000000000000000000 =
  00000000000000000000000000000000  //overflow!

有没有简单快捷的方法来检查这个?

解决方法:

从Java 8开始,Math类中有一组方法:
toIntExact(long),addExact(int,int),subtractExact(int,int),multiplyExact(int,int)以及long版本.
如果发生溢出,它们会抛出ArithmeticException,如果它适合该范围,它们将返回正确的结果.

添加示例:

int x = 2000000000;
int y = 1000000000;
try {
    int result = Math.addExact(x, y);
    System.out.println("The proper result is " + result);
} catch(ArithmeticException e) {
    System.out.println("Sorry, " + e);
}

标签:java,bit-manipulation,integer,integer-overflow,integer-arithmetic
来源: https://codeday.me/bug/20190930/1836176.html