5.7.1 부호 없는 정수
부호 없는 정수(unsigned integer) 타입을 사용하면 표준 산술 연산을 수학적으로 깔끔하게 표현할 수 있다. 이 타입은 산술 연산에 닫혀 있다.
TAKEAWAY 5.50 부호 없는 산술 타입은 경계값을 넘으면 원점으로 돌아간다(wrap around).
수학적으로 표현하면 숫자 N에 대한 모듈로 정수 집합인 ZN 환(ring)을 구현한 것으로, 0부터 N – 1까지의 값을 표현한다. 최댓값인 N – 1은 부호 없는 정수 타입마다 다르며, 각 타입마다 이름 끝에 _MAX가 붙는 매크로가 제공된다. 예를 들어 부호 없는 기본 정수 타입의 최댓값에 대해 UINT_MAX, ULONG_MAX, ULLONG_MAX 등이 제공되며 limits.h에 정의되어 있다. 앞에서 본 것처럼 size_t의 최댓값인 SIZE_MAX는 stdint.h에 정의되어 있다.
음이 아닌 정수 값에 대한 바이너리 표현은 비트(bit)C라고 부르는 이진수 b0, b1, … , bp-1로 구성되며, 각 비트는 0 또는 1이란 값을 갖는다. 이렇게 표현한 바이너리 숫자에 대한 십진수 값은 다음 식으로 구할 수 있다.
(5.1)
여기서 p를 해당 타입의 정밀도(precision)C, b0 비트를 LSB(Least-Significant Bit)(최하위 비트)C, bp–1 비트를 MSB(Most-Significant Bit)(최상위 비트)C라고 한다.