John Kugelman의 답변을 직접 편집하여 대체하지 않고 작성하고 싶습니다. 2의 보수 정수의 경우가 아닌 대칭으로 인해 그의 테스트 케이스 ( MIN_VALUE = -10
, MAX_VALUE = 10
)에서 작동합니다 MIN_VALUE == -MAX_VALUE
. 실제로 MIN_VALUE == -MAX_VALUE - 1
.
scala> (java.lang.Integer.MIN_VALUE, java.lang.Integer.MAX_VALUE)
res0: (Int, Int) = (-2147483648,2147483647)
scala> (java.lang.Long.MIN_VALUE, java.lang.Long.MAX_VALUE)
res1: (Long, Long) = (-9223372036854775808,9223372036854775807)
true MIN_VALUE
및에 적용될 때 MAX_VALUE
John Kugelman의 답변은 when a == -1
and any other b ==
(Kyle이 처음 제기 한 포인트) 오버플로 케이스를 생성합니다 . 문제를 해결하는 방법은 다음과 같습니다.
long maximum = Long.signum(a) == Long.signum(b) ? Long.MAX_VALUE : Long.MIN_VALUE;
if ((a == -1 && b == Long.MIN_VALUE) ||
(a != -1 && a != 0 && ((b > 0 && b > maximum / a) ||
(b < 0 && b < maximum / a))))
{
// Overflow
}
그것은 어떤에 대한 일반적인 해결책이 아니다 MIN_VALUE
및 MAX_VALUE
하지만 자바의의 일반입니다 Long
및 Integer
및의 값 a
과 b
.