登录
  • #刷题

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

traceroute_su
1225
5
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的话,是无法正确显示的和计算的,这个办法很好解决这个问题。。。

但是。。。我没看懂。。。能不能给小弟讲讲。。。。先谢谢了
5条回复
热度排序

发表回复