인프런 커뮤니티 질문&답변
[5.11 자료형 변환] 3:22 부분부터 시작되는 ranking 개념
해결된 질문
작성
·
344
0
[ 3:22 ] 시작
자료형의 ranking 개념을 소개해주시고 계십니다.
"실수형 사이에서는 랭킹이 명확하다"
"정수형은 실수형보다 랭킹이 낮다."
"정수와 실수의 연산을 하면 정수를 형변환 한 뒤에 실수끼리 더한다"
ranking 개념을 '연산 우선도' 정도로 번역해도 될까요?
단순히 랭킹이 높다 라고 하시니 잘 이해가 되질 않습니다.
이를태면,
unsigned int a = 1, b = 0;
int c = -2
b = a + c;
printf(%u, b);
이러면 unsigned int 변수인 b 가 -1이 되니 오버플로우가 일어나는데 랭크는 연산 순서? 우선도?에만 관련이 있는것이지 표현 범위와는 관계가 없다고 이해해도될까요?
(근데 글을 쓰다보니 든 생각인데 애초에 코드를 생각하면서 잘 쓰면 일어날 일이 없는 것이군요...)
퀴즈
프로그래밍에서 반복 루프(repetition loop)를 사용하는 가장 주된 이유는 무엇일까요?
프로그램의 길이를 늘리기 위해
동일하거나 유사한 작업을 효율적으로 반복하기 위해
오류 메시지를 확인하기 위해
변수의 선언을 간소화하기 위해
답변 1
2
타입이 다른 두 피연산자를 연산할 때 타입을 같게끔 맞춰야 하는데 그렇다면 어떤 타입으로 통일할 것인가에 대한 랭킹이라고 생각해주시면 될 것 같아요!
a * b 라는 연산을 한다고 가정 할 때 a 가 int 이고 b 가 double 이라면 랭킹이 더 높은 double 로 타입을 같게끔 맞추기로 합니다. 따라서 a 가 double 로 형변환이 됩니다. 이제 두 피연산자가 double로 타입이 맞춰졌습니다! 그러면 double 끼리 연산 한 것이니 이 a * b 의 결과도 double 이 되구요!
4byte 인 int 에서 8byte double 로 변환하면 그냥 그릇만 커진 것이므로 데이터 손실은 일어나지 않습니다. 반면에 double 에서 int 로 변환한다면 8 byte 짜리 데이터를 4byte 짜리 그릇에 욱여 넣으려고 하는 것이니 데이터 손실이 발생합니다. 그렇기 때문에 주로 크기가 더 큰 타입이 랭킹이 더 높습니다.
아래 예시 코드는 여기서 배운 랭킹 개념과 상관 없어보입니다. 타입이 다른 두 피연산자를 연산하는 a + c 는 랭킹 개념과 관련이 있겠으나 이 결과를 b 에 대입하겠다는건 랭킹과는 상관 없는 개념입니다.( a + c 결과는 어찌됐건 -1 이기 때문에 이 결과를 unsigned int 에 대입하면 오버플로우가 발생하겠습니다. )





