Math google guava库中溢出的条件

Math google guava库中溢出的条件,math,overflow,guava,integer-arithmetic,underflow,Math,Overflow,Guava,Integer Arithmetic,Underflow,这是LongMath.checkedAddd()方法的代码,该方法在溢出或下溢时引发算术异常 public static long checkedAdd(long a, long b) { long result = a + b; checkNoOverflow((a ^ b) < 0 | (a ^ result) >= 0); return result; } static void checkNoOverflow(boolean condition) { if

这是LongMath.checkedAddd()方法的代码,该方法在溢出或下溢时引发算术异常

public static long checkedAdd(long a, long b) {
  long result = a + b;
  checkNoOverflow((a ^ b) < 0 | (a ^ result) >= 0);
  return result;
}

static void checkNoOverflow(boolean condition) {
  if (!condition) {
    throw new ArithmeticException("overflow");
  }
}
公共静态长选中添加(长a、长b){
长期结果=a+b;
checkNoOverflow((a^b)<0 |(a^result)>=0);
返回结果;
}
静态void checkNoOverflow(布尔条件){
如果(!条件){
抛出新的算术异常(“溢出”);
}
}

我理解此API为什么要测试(a^result),但我不理解包含此条件的原因:(a^b)<0。测试数字是否具有相反的符号有什么帮助?

正如格雷格所写,如果
a
b
具有相反的符号(*),那么添加它们不可能溢出。现在,如果它们具有相同的符号,那么如果存在mo溢出,则结果的符号必须相同



(*)零和阳性处理相同,这无关紧要,使情况变得简单。

如果
a
b
是相反的符号,那么它们的相加不可能溢出。你是对的,我错过了!在这种情况下。