Notice
Recent Posts
Recent Comments
LuvSea
부호 확장(Sign extension) 본문
336x280(권장), 300x250(권장), 250x250, 200x200 크기의 광고 코드만 넣을 수 있습니다.
- #include <stdio.h>
- int main()
- {
- char a = -1;
- unsigned char c = -1;
- int b = a;
- printf("%X\n", b);
- b = c;
- printf("%X\n", b);
- system("pause");
- return 0;
- }
결과는 다음과 같다.
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