Page 21 -
P. 21
000 .... 00
000..... 01
n
n비트 2 n 0~(2 -1)
....
111 .... 11
예를 들어, 4바이트로 표현할 수 있는 숫자를 계산해 볼까요? 4바이트는 32비트이므로 양의 정
32
수로만 표현할 수 있는 숫자는 4,294,967,296(=2 )개 입니다. 그런데 모든 정수는 양수, 0과
음수까지 포함합니다. 따라서 음수까지 범위를 넓힌다면 32비트로 표현할 수 있는 정수의 범위
는 4,294,967,926 / 2 = 2,147,483,648로 나누어, -2,147,483,648부터 2,147,483,647까지입
니다. 다시 말해 이 범위를 넘어서는 정수는 int 자료형을 사용해서 저장할 수 없습니다.
만약 변수가 저장할 수 있는 범위를 넘어서는 수를 저장하면 어떻게 될까요? 이럴 경우 오버플
로(overflow)가 발생했다고 합니다. 예를 들어 0~9까지만 저장할 수 있는 자료형이 있다고 가
정하겠습니다. 이 자료형에 10을 저장하려고 하면 오버플로가 발생하여, 10은 저장하지 못하
고 다시 처음 숫자인 0으로 되돌아가 저장됩니다. 즉, 0 → 1 → 2 → 3 → 4 → 5 → 6 → 7 →
8 → 9 → 0 → 1...과 같이 숫자가 반복된다고 생각하면 됩니다.
ੑ оמ ੑ ࠛо
그림 2-9 | 0~9까지만 저장 가능한 자료형에 10은 못 들어감(오버플로의 예)
int_size.c 코드 실행 결과를 다시 보면, 변수 b와 d는 오버플로가 발생하여, 다시 처음으로 돌아
간 값인 b=-2147483648과 d=2147483647이 출력된 것입니다.
그렇다면 범위를 넘어서는 정수는 저장할 수 없는 걸까요? 아닙니다. C 언어는 큰 숫자를 표현
할 수 있도록 long이라는 또 다른 정수 자료형을 제공합니다. long 자료형은 4바이트의 두 배
인 8바이트를 사용하여 정수를 담을 수 있는 상자라고 생각하면 됩니다. 하지만 이 책에서 C
2장 기억 상자 만들기 – 변수 43