LuvSea

부호 확장(Sign extension) 본문

sTudy

부호 확장(Sign extension)

사랑海 2009. 8. 10. 15:14
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
  1. #include <stdio.h>   
  2.   
  3. int main()   
  4. {   
  5.     char a = -1;   
  6.     unsigned char c = -1;   
  7.     int b = a;   
  8.        
  9.        
  10.     printf("%X\n", b);   
  11.     b = c;   
  12.     printf("%X\n", b);   
  13.     system("pause");   
  14.     return 0;   
  15. }  


결과는 다음과 같다.



int형 b에 같은 -1을 대입했는데 왜 결과 값은 다르게 나올까.

그 이유는 부호 확장에 있다.

int b = a 에서 a는 char 형이기 때문에, 묵시적인 형변환이 발생하게 되는데 이때, char형 데이터인 a를 바로 int형 데이터 b에 넣는 것이 아니라 a를 4바이트 크기로 확장을 하게 된다.

1바이트에서 4바이트로 확장을 하면서 나머지 빈 공간에는 음수면 1로 채우고 양수면 0으로 채우게 된다.

따라서 (signed) char 인 a변수는 앞에 1을 채워서 FFFFFFFF가 되고, unsigned char 인 c변수는 앞에 0을 채워서 FF가 되는 것이다.

'sTudy' 카테고리의 다른 글

Volatile 한정자  (0) 2009.08.10
DDRA, PORTA를 찾아보자.  (0) 2009.08.10
[C언어] 구조체의 메모리 저장방식과 #pragma pack  (5) 2009.08.10
C++ 연산자 오버로딩  (0) 2009.08.10
C++에서의 동적할당  (0) 2009.08.10
Comments