int main()
{
unsigned int a = 0xfffffff7;
char *b = (char *)&a;
printf("%08x",*b);
}
출력은 다음과 같습니다 fffffff7
. 내 컴퓨터가 리틀 엔디안입니다. 물론 *b
이 0xf7
과 같음을 알지만, 왜 printf()
의 출력이 이와 같은지는 알 수 없습니다.
int main()
{
unsigned int a = 0xfffffff7;
char *b = (char *)&a;
printf("%08x",*b);
}
출력은 다음과 같습니다 fffffff7
. 내 컴퓨터가 리틀 엔디안입니다. 물론 *b
이 0xf7
과 같음을 알지만, 왜 printf()
의 출력이 이와 같은지는 알 수 없습니다.
시스템이 작은 엔디안이기 때문에, a
는 F7 FF FF FF
로 메모리에 저장됩니다.
b
은 a
의 첫 번째 바이트를 가리 킵니다. (F7)
*b
은 char
으로 평가된다. 그것은 FFFFFFF7
되기 위해 연장 된 표시이다 (signed char
통상 디폴트) char
타입의 이후 (F7)
*b
은 매개 변수로 전달하기위한, int
로 승격된다.
+-----------------------+
| F7 <--b=(char *) &a|
| FF |
| FF |
| FF |
| |
+-----------------------+
printf("%08x",*b);
// 수단 : 정수 유형으로 문자를 인쇄 할 때
*b
는 (F7)
%08x
무엇을 기대 했습니까? – TGO
'% 08x'은 8 진수로 8 진수를 요구하며 앞에 0이 붙습니다. 그리고 정수형으로 char을 출력 할 때 print 전에 int로 넓혀진다. –
출력이 000000f7이 아닌 이유 –