더북(TheBook)

표에서 회색으로 표시된 것처럼 산술 연산에 직접 쓸 수 없는 타입은 여섯 개다. 이를 좁은 타입(narrow type)C이라 하며, 이 타입을 산술 표현식에 사용하면 먼저 넓은 타입으로 승격(promote)C된다. 요즘 나온 플랫폼에서는 부호 있는 타입이 아니어도 좁은 타입을 무조건 signed int로 승격시킨다.

TAKEAWAY 5.10 좁은 정수 타입을 산술 표현식에 사용하면 signed int로 승격된다.

좁은 정수 타입 중에서도 charbool에 주목할 필요가 있다. char는 텍스트로 출력할 수 있는 문자에 대한 타입이고, boolfalsetrue라는 진리값을 갖는다. 앞에서 말했듯이 C에서는 이런 값도 모두 숫자다.

승격되지 않은 나머지 12가지 타입은 네 종류로 깔끔하게 나뉜다.

TAKEAWAY 5.11 네 가지 기본 타입마다 승격되지 않은 타입이 세 가지씩 있다.

사람들이 잘못 알고 있는 경우가 많은데, 이 12가지 타입에 대한 정밀도는 C 표준에 명시되어 있지 않다. 그래서 구현에 따라 달라지는 경우가 많다.

이와 달리 부호 있는 타입이 가질 수 있는 값의 범위의 포함 관계는 등급(rank)에 맞게 정의돼야 한다고 표준에서 명시하고 있다.

▲ 그림 5-1 부호 있는 타입의 포함 관계

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