- #刷题
求问大家一道位操作判断溢出的代码,没看懂精华,请教

12255
public static boolean willAdditionOverflow(Long left, Long right) {
if (right < 0 && right != Long.MIN_VALUE) {
return willSubtractionOverflow(left, -right);
} else {
return (~(left ^ right) & (left ^ (left + right))) < 0;
}
}
public static boolean willSubtractionOverflow(Long left, Long right) {
if (right < 0) {
return willAdditionOverflow(left, -right);
} else {
return ((left ^ right) & (left ^ (left - right))) < 0;
}
}
这代码是可以用判断long的溢出的。效果非常棒。因为在64位机器里,一旦有数字大于max val的话,是无法正确显示的和计算的,这个办法很好解决这个问题。。。
但是。。。我没看懂。。。能不能给小弟讲讲。。。。先谢谢了
if (right < 0 && right != Long.MIN_VALUE) {
return willSubtractionOverflow(left, -right);
} else {
return (~(left ^ right) & (left ^ (left + right))) < 0;
}
}
public static boolean willSubtractionOverflow(Long left, Long right) {
if (right < 0) {
return willAdditionOverflow(left, -right);
} else {
return ((left ^ right) & (left ^ (left - right))) < 0;
}
}
这代码是可以用判断long的溢出的。效果非常棒。因为在64位机器里,一旦有数字大于max val的话,是无法正确显示的和计算的,这个办法很好解决这个问题。。。
但是。。。我没看懂。。。能不能给小弟讲讲。。。。先谢谢了
5条回复
热度排序