C 언어. unsigned int var에 음의 정수 할당하기, 왜 오류가 뜨지 않는 걸까요?
글쓴이: heodh / 작성시간: 금, 2010/02/19 - 3:45오후
unsigned int는 음수 범위를 제거해서 표현 가능한 데이터 범위를 넓힌다고 책에 나와서 테스트를 해봤습니다.
1 #include <stdio.h> 2 3 int main (void) 4 { 5 unsigned int var= -60; 6 printf("%d\n", var); 7 return 0; 8 }
그런데 컴파일할 때도 그렇고 실행을 할 때도 오류가 뜨지 않았습니다.
결과는 -60이 나오고요. 왜 그런건가요?
gcc (Ubuntu 4.3.3-5ubuntu4) 4.3.3
Forums:
뜨지 않는게 정상입니다.
C에서는 변수에 Overflow 값을 넣어도 그냥 들어가버리죠.
-60을 넣어도 변수 값에는 엄청 큰 양수가 들어있습니다.
출력해도 음수가 나오는것은
%d가 decimal(정수)를 뜻하기 때문입니다.
unsigned의 값을 출력하시려면 %u를 이용하시면 됩니다.
1 #include 2 3 int main
1 #include
2
3 int main (void)
4 {
5 unsigned int var= -60;
6 printf("d %d\n", var);
7 printf("u %u\n", var);
8 return 0;
9 }
그렇군요, 실제 들어가 있는 값을 %u로 확인 할수 있더라도 %d로 나오는 -60은 어디있다가 다시 나오는 걸까요?
같은 값이 %u 와 %d 인
같은 값이 %u 와 %d 인 경우 다르게 보일 뿐입니다.
음수 정수는 최상위 비트가 1로 셋팅되는데 unsigned 에서는 이 비트를 숫자의 일부로 하여 출력하게 되죠.
unsigned int var= (unsgiend
unsigned int var= (unsgiend int)-60;
와 같죠. =.=
signed int나 unsigned int나. (보통) 4바이트 메모리 공간일 뿐입니다.
댓글 달기