Page 20 -
P. 20

printf("c = %d\n", c);
                      printf("d = %d\n", d);
                  }


                  실행 결과
                  a = 2147483647
                  b = -2147483648
                                                        TIP
                  c = -2147483648                        비주얼 스튜디오에서 이 코드를 실행하면 오류가 발생합니다. 정
                                                         상적이지 않은 값을 유도하기 위해 처음부터 변수의 범위를 넘어
                  d = 2147483647
                                                         서는 값을 초기화하였기 때문입니다.

                실행 결과를 자세히 보면 a와 c는 정상적으로 결과가 나왔지만, b와 d는 정확한 값으로 출력되
                지 않았습니다. 왜 이런 현상이 발생했을까요?

                int는 정수를 저장하는 데 필요한 메모리 공간을 4바이트 사용한다고 하였습니다. 설명한 바

                와 같이 컴퓨터는 모든 정보를 0과 1, 즉 2진수로 처리합니다. 이때 0 또는 1을 저장할 수 있
                는 메모리 공간을 비트(bit)라고 합니다. 비트는 컴퓨터가 정보를 저장하는 최소 공간으로, 8개
                의 비트가 모인 공간을 바이트(byte)라고 합니다. 그러므로 4바이트는 32비트와 같습니다. 1비
                트로 표현 가능한 숫자는 0과 1 두 개뿐입니다. 2비트로 표현 가능한 숫자는 2진수 00, 01, 10,

                11, 즉 10진수로 0, 1, 2, 3을 표현하고 저장할 수 있습니다. 확장하여 3비트일 때는 어떨까요?

                000, 001, 010, 011, 100, 101, 110, 111, 즉 정수 0~7까지 총 8개의 정수를 표현하고 저장할
                                                                   n
                수 있습니다. 그러므로 n비트로 저장 가능한 숫자의 범위는 0 ~ 2 (n은 비트의 개수) – 1까지 입
                니다.

                표 2-1 | 비트 개수에 따른 메모리 저장 가능 범위
                                                     저장 가능 범위
                  비트 개수
                               메모리           저장 가능 개수                저장 숫자 범위
                                                                                  1
                   1비트          0, 1             2              0과 1           0~(2-1)
                               00, 01,
                                                                                  2
                   2비트                           4              0~3            0~(2 -1)
                                10, 11
                               000, 001
                               010, 011
                                                                                  3
                   3비트                           8              0~7            0~(2 -1)
                               100, 101
                               110, 111
                    ...                          ...             ...             ...




         42   모두의 C 언어
   15   16   17   18   19   20   21