#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 |