-2147483648 ~ +2147483647 범위(int 자료형 범위)에 있는 정수 세개를 더한 값을 표시 하는 문제인데
내가 뭘 틀린건지 모르겠음
int 세개를 더한 거라 int의 최댓값보다 큰 숫자가 나오니까 long long에 저장하고 출력도 %lld로 하는게 맞지 않음?
-2147483648 ~ +2147483647 범위(int 자료형 범위)에 있는 정수 세개를 더한 값을 표시 하는 문제인데
내가 뭘 틀린건지 모르겠음
int 세개를 더한 거라 int의 최댓값보다 큰 숫자가 나오니까 long long에 저장하고 출력도 %lld로 하는게 맞지 않음?
a + b + c 계산할때는 int형으로 계산하기 때문에 int 범위를 초과하면 오버플로우가 발생하고 그 값이 sum에 들어감. 그래서 예상한 결과값과 다른 거일듯?
더한 값이 더한 것들의 자료형보다 크면 임시로 값을 저장할 때 오버플로우가 생긴다는 거임?
수 + 수 -> 더 큰수에 저장. 이라는 생각은 안돼. 수 + 수 에서 오버플로우 날 수 있으면 더 큰수가 되기 전에 그냥 오버플로우 된 값으로 바뀌어
아 그러면 수끼리 더한 값이 더한 수들의 자료형보다 크면 큰자료형의 변수에 저장하기도전에 임시로 값을 저장을 하는데 그 때 오버플로우가 생긴다는 거임?
ㅇㅇ
오 정말 ㄳㄳ
조금 만 더 자세하게 설명해주면, cpu에는 레지스터라는게 있고 (사칙)연산은 양쪽 데이터 타입 중 큰 값으로 잡혀. (e.g. 32bit + 16bit 면 32bit 레지스터에서 연산) 32bit + 32bit면 32bit 짜리 레지스터 잡히고 거기서 연산 하는데 칸 자체가 32bit이기 때문에 32bit가 표현할 수 있는 범위를 넘어가면 오버플로우 남. 32bit+32bit -> 64bit 라고 생각하는게 사실은 32bit+32bit -> 연산결과 (32bit) -> move 64bit 야
와 진짜 ㄳㄳ 강의로도 못배운 내용을 배우네 정말 ㄳ
미리 타입캐스팅 하고 더해야댐