标签:java bit-manipulation integer integer-overflow integer-arithmetic
我知道这样的话题被问过好几次,但我的问题是关于整个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
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。