더북(TheBook)

026 두 큰 int/long 수의 합과 연산 오버플로

 

아래 예제를 통해 + 연산자의 해법부터 알아보자.

int x = 2;
int y = 7;
int z = x + y; // 9

아주 간단한 접근으로 int, long, float, double을 포함하는 대부분의 계산에 잘 동작한다.

이제 + 연산자를 아래처럼 두 큰 수에 적용해보자(2,147,483,647을 두 번 더한다).

int x = Integer.MAX_VALUE;
int y = Integer.MAX_VALUE;
int z = x + y; // -2

z의 결과를 4,294,967,294로 예상했으나 -2가 나왔다. z의 타입을 int에서 long으로 바꿔도 결과는 달라지지 않는다. 하지만 xy의 타입까지 모두 int에서 long으로 바꾸면 원하는 결과가 나온다.

long x = Integer.MAX_VALUE;
long y = Integer.MAX_VALUE;
long z = x + y; // 4294967294

단, Integer.MAX_VALUELong.MAX_VALUE로 바꾸면 같은 문제가 반복된다.

long x = Long.MAX_VALUE;
long y = Long.MAX_VALUE;
long z = x + y; // -2
신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.