StackOverflow热帖:Java整数相加溢出怎么办?Java8一步搞定~
阅读本文大概需要 2 分钟。
作者:Aaron_涛
问题
解决方案
加法
public static int addExact(int x, int y) {int r = x + y;// HD 2-12 Overflow iff both arguments have the opposite sign of the resultif (((x ^ r) & (y ^ r)) < 0) {throw new ArithmeticException("integer overflow");}return r;}
减法
public static int subtractExact(int x, int y) {int r = x - y;// HD 2-12 Overflow iff the arguments have different signs and// the sign of the result is different than the sign of xif (((x ^ y) & (x ^ r)) < 0) {throw new ArithmeticException("integer overflow");}return r;}
乘法
public static int multiplyExact(int x, int y) {long r = (long)x * (long)y;if ((int)r != r) {throw new ArithmeticException("integer overflow");}return (int)r;}
public static long multiplyExact(long x, long y) {long r = x * y;long ax = Math.abs(x);long ay = Math.abs(y);if (((ax | ay) >>> 31 != 0)) {// Some bits greater than 2^31 that might cause overflow// Check the result using the divide operator// and check for the special case of Long.MIN_VALUE * -1if (((y != 0) && (r / y != x)) ||(x == Long.MIN_VALUE && y == -1)) {throw new ArithmeticException("long overflow");}}return r;}
如何使用?
写这个的目的
推荐阅读:
微信扫描二维码,关注我的公众号
朕已阅 
评论

