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
   16   17   18   19   20   21