c·c++/c 프로그래밍

short형과 unsigned short형

바로이순간 2011. 12. 26. 13:52

#include <stdio.h>
int main() {
    short num1=32767;
    short num2=-32768;
    unsigned short num3=65535;
    unsigned short num4=0;

 

    num1=num1+1;
    num2=num2-1;
    num3=num3+1;
    num4=num4-1;

 

    printf("num1=%d\n",num1);
    printf("num2=%d\n",num2);
    printf("num3=%d\n",num3);
    printf("num4=%d\n",num4);
  
    return 0;
}

 

위의 프로그램의 결과를 예측하고 그 이유를 설명하시오.

-------------------------------------------------------------------------------------------------------

결과는
num1 = -32768
num2 = 32767
num3 = 0
num4 = 65535
가 나온다.
 
그 이유는 다음과 같다. 내부적으로 그냥 short 형과 unsigned short형은 꼭 같은 형이다.
단지 c언어가 해석을 할때 어떻게 10진수로 해석을 하느냐에 따라서 결과가 달라진다.
 
우선 32767은 비트로 보면 0111 1111 1111 1111 이다.
1을 더하면                    1000 0000 0000 0000 이 된다.
이는 short형으로 보았을때 -32768이 된다.
 
-32768에서 1을 빼보자.    1000 0000 0000 0000에서
1을 빼면                  0111 1111 1111 1111 이 된다.
이는 short형으로 보았을때 32767이다.
 
[위에서 뺀다는 것은 직관적으로 계산해도 되고 2의 보수로 바꾸어서 계산해도 된다]
 
이제 65565를 비트로 보면 1111 1111 1111 1111 이다. 1을 더하면
0000 0000 0000 0000 이 된다. 0이 되었다.

 

'c·c++ > c 프로그래밍' 카테고리의 다른 글

Visual Studio 사용법  (0) 2011.12.31
long long int  (0) 2011.12.28
초보자들이 보기좋은 쉬운 책  (0) 2011.12.25
문자열의 배열과 포인터  (0) 2011.12.16
이진수 문자열을 10진수로 변환  (0) 2011.12.15