Java - 정수 오버플로 확인(Check int overflow)

들어가기

음 Java에서 숫자 연산을 할때 고려해야 해야할 점이 여러개 있다.

실수 연산의 경우 부동소수점에 의한 정밀도 float 타입에 정수를 할당 할 경우 float 타입의 가수범위등...

하지만 가장 기본이 되는것은 역시 해당 타입이 표현할수 있는 숫자범위를 초과하는 값을 할당 할 경우이다.

다음 코드는 int 두값을 더할 때, 그 결과가 int 타입에 저장할 때 그 범위가 초가되면 ArithmeticException를 발생시키는 코드이다.

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
package java_test;

public class CheckOverflowExmaple {

public static void main(String[] args) {

try {

System.out.println("맥스:" + Integer.MAX_VALUE);
System.out.println("민:" + Integer.MIN_VALUE);

int result = safeAdd(2000000000, -2000000000);
System.out.println(result);

}catch(Exception e) {
e.printStackTrace();
}

}


public static int safeAdd(int left, int right) {
if( right>0) {
if(left > (Integer.MAX_VALUE - right)) {
throw new ArithmeticException("오버플로어 발생2");
}
} else {
if(left <(Integer.MIN_VALUE - right)) {
throw new ArithmeticException("오버플로어 발생2");
}
}

return left + right;
}

}