1

これは、オーバーフローまたはアンダーフロー時に算術例外をスローする LongMath.checkedAdd() メソッドのコードです。

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");
  }
}

この API が (a ^ result) をテストしている理由は理解していますが、この条件を含める理由がわかりません: (a ^ b) < 0 。数値が反対の符号であることのテストはどのように役立ちますか?

4

1 に答える 1