2016-08-07 2 views
3

나는이 예제와 같이 java.lang.ArithmeticException을 얻을 :정수 오버플로에 예외를 발생시키는 방법은 무엇입니까? 나는 0으로 나누면

int a = 3/0; 

내가 정수 오버 플로우도 예외가 발생 있도록를하고 싶습니다. 따라서 다음 프로그램은 -2147483648을 인쇄하는 대신 예외를 발생시킵니다.

public static void main(String[] args) { 
    int a = Integer.MAX_VALUE + 1; 
    System.out.println(a); 
} 

내가 오버플로하지 않고 사용 가능한 메모리에 의해서만 제한되는 BigInteger를 사용할 수 있음을 알고 있습니다.

나는 오버런을 검사하는 내 add 기능을 만들 수 있음을 알고 있습니다. 또는 Java 8 Math.addExact을 사용할 수 있습니다.

는 I는 정수 가산 오버플, 결과는 하위 일부 충분히 큰 에 도시 된 바와 같이 수학적 합 비트이면 I가 JLS at 15.18.2

로 동작 반대 요구하고 실현 2의 보수를-보완 체재. 오버플로가 발생하면 결과의 부호가 두 피연산자 값의 수학적 합계 기호와 같지 않습니다.

JVM의 소스를 수정하고 그러한 수정 된 JVM을 사용하는 것 외에. 이것을 충실히 수행 할 방법이 있습니까? 그리고 JVM의 소스를 수정하는 것만으로는 충분하지 않을 것입니다. 왜냐하면 라이브러리가 그 행동에 의존 할 수 있고, 이것들이 내 코드에만 영향을 미치기를 원하지 않기 때문입니다.

답변

5

나는 유감 스럽지만 그렇게 할 수는 없습니다.

유일한 해결책은 자신의 함수를 작성하거나 Math#addExact을 사용하는 것입니다.

관련 문제