더북(TheBook)

5.4 암묵적 변환

예제에서 본 것처럼 피연산자의 타입에 의해 연산자 표현식의 타입이 결정된다. 가령 -1signed int인 반면, -1Uunsigned int가 된다. 초보자는 -1Uunsigned int라는 점이 의외라고 생각할 수 있는데, unsigned int는 음수가 없으므로 -1U는 값이 큰 양수가 된다.

TAKEAWAY 5.29 단항 연산자인 -+의 타입은 승격된 인수 타입을 따른다.

따라서 이런 연산자는 대체로 타입이 변하지 않는다. 변하더라도 C의 암묵적 변환(implicit conversion) 규칙을 따른다. 다시 말해 이는 특정한 타입의 값을 다른 타입으로 변환할 때 적용되는 규칙이다. 다음 예를 살펴보자. 앞에서와 마찬가지로 이번에도 signed int의 최솟값과 최댓값이 각각 -2147483648과 2147483648이라고 가정했다.

double         a = 1;           // 문제 없음. 타입에 맞는 값이다.
signed short   b = -1;          // 문제 없음. 타입에 맞는 값이다.
signed int     c = 0x80000000;  // 위험. 지정된 타입을 벗어나는 값이다.
signed int     d = -0x80000000; // 위험. 지정된 타입을 벗어나는 값이다.
signed int     e = -2147483648; // 문제 없음. 타입에 맞는 값이다.
unsigned short g = 0x80000000;  // 정보 손실 발생. 0이 된다.

여기서 ab를 초기화하는 데는 아무 문제가 없다. 각각의 값이 주어진 타입의 범위를 벗어나지 않는다. 따라서 C 컴파일러는 타입을 암묵적으로 변환할 수 있다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.