5.7.5 부호 있는 정수
부호 있는 타입은 부호 없는 타입보다 훨씬 복잡하다. C 언어를 구현할 때 다음과 같은 두 가지 사항을 결정해야 한다.
• 산술 연산에서 오버플로가 발생할 때 처리하는 방법
• 부호 있는 타입의 부호를 표현하는 방법
정수 등급(rank) 관점에서 보면 부호 있는 타입과 부호 없는 타입은 서로 동급이다. 표 5-1에서 예외적인 경우는 char와 bool 정도다. 부호 있는 타입의 바이너리 표현은 그림 5-1에서 본 포함 관계가 적용된다.
TAKEAWAY 5.54 양수 값의 표현 방식은 부호의 존재 여부와 관계없다.
다르게 말하면 양수 값의 표현은 부호 있는 타입일 때와 부호 없는 타입일 때가 같다. 그래서 정수 타입의 최댓값을 쉽게 표현할 수 있는 것이다(TAKEAWAY 5.51). 즉, 부호 있는 타입도 정밀도 p에 의해 해당 타입의 최댓값이 결정된다.
C 표준의 정의에 따르면 부호 있는 타입에는 부호 비트(sign bit)C가 있다. 이 비트가 0이면 양수고, 1이면 음수가 된다. 헷갈리게도 음수를 표현하는 데 부호 비트를 사용하는 방법이 여러 가지다. C에서 허용하는 부호 표현 방식(sign representation)C은 다음과 같이 세 가지다.
• 부호와 크기(sign and magnitude)C
• 1의 보수(one’s complement)C
• 2의 보수(two’s complement)C