JAVA
[JAVA] int에서 오버플로우 문제 발생했을 때
nayonsoso
2023. 6. 1. 13:48
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 세개는 더 커버 가능함