코딩테스트/Java 문법 정리

int, long 자료형 오버플로우 궁금증해결!

SK_MOUSE 2022. 3. 18. 20:39
반응형

해당 글은 오버플로우 원인과 해결 방법에 대해 탐구하는 글이다.

int형은 21억xxx이므로 a,b,c 값을 10억씩 넣어주었다.

 

#case1

좌항 long일때 우항의 합이 int 오버플로우이면 값이 잘 주입될까?

정답 : 우항의 계산중 오버플로우 된값이 좌항에 주입된다.

 

a+b+c = 30억이 나와야 하지만 

우항에서 a+=b;  -> a+=c; -> sum= a; 와 같이 실행되므로 오버플로우가 발생한다.

셋다 int형

 

#case2

우항에서 맨 처음 변수에 long타입으로 먼저 형변환을 하면 계산이 잘 될까?

정답 : 우항의 계산이 잘 되어 sum에 주입된다.

(long)a+=b;

(long)a+=c;

 

반응형

를 실행하면 오버플로우가 발생하지 않고 최종적으로 sum=(long)a 를 할당해줌으로서 무사히 값이 들어간다.

우항 맨 앞 변수 형변환

#case3

오버플로우 되는 시점에 딱 형변환이 된 값이 연산되면 될까?

정답 : 그때 변경해주는 것이 포인트다! 잘 계산된다.

 

아래 예시에서는 b를 더할때 30억이 되면서 오버플로우가 발생하는 것이 맞다고 생각할 수 있다.

하지만 b의값을 long으로 형변환하므로 타입이 맞춰져서a​(int)+b(long)=30억이 잘 실행된다.

 

※ 이때 a의 자료형도 long으로 타입캐스팅 되는 것으로 보여진다.

 

이후 a(long)+c(int) = 30억+10억 = 40억이 되어 sum에 계산된 값이 잘 주입된다.

a+=b를 할때 형변환: 30억이 되면 오버플로우가 안된다

 

 

자 그러면 아래 예시도 왜 오버플로우인지도 알겠나요?

 

(a+b+c)에서 이미 오버플로우 발생

반응형