본문 바로가기

JAVA

[JAVA] int에서 오버플로우 문제 발생했을 때

int에서 오버플로우 문제 발생했을 때

발생 원인

int는 4byte즉, 32bit로 -2^31 ~ +2^31-1 즉, 약 ±2,000,000,000 까지만 표현이 가능하고
이 범위를 넘어가면 오버플로우가 발생한다.

발생 상황

int를 여러번 곱하는 for문에서 주로 발생한다.
또한, 1,000,000,007로 나눈 나머지를 요구하는 문제가 있으면 오버플로우가 발생하는지를 의심해봐야한다.

해결 방법

아래 내용 중 하나라도 지키지 않으면 오버플로우가 발생할 수 있다.

1) 계산하는 변수를 int가 아니라 long으로 선언한다.
2) for문 안에서 %= 1,000,000,007을 해준다.
for문에서 곱셈을 다 하고 return 직전에 mod연산을 해주면 이미 오버헤드가 발생한 이후이므로 효과가 없다.
3) return 할 때 long을 int로 강제 형변환해준다.
=> (int)longAnswer

cf. long은 64bit로 int보다 0 세개는 더 커버 가능함