2013-08-18 4 views
2

코드 :C 프로그램의 출력을 설명하는 방법

int main() 
{ 
    unsigned int a = 0xfffffff7; 
    char *b = (char *)&a; 
    printf("%08x",*b); 
} 

출력은 다음과 같습니다 fffffff7. 내 컴퓨터가 리틀 엔디안입니다. 물론 *b0xf7과 같음을 알지만, 왜 printf()의 출력이 이와 같은지는 알 수 없습니다.

+6

무엇을 기대 했습니까? – TGO

+1

'% 08x'은 8 진수로 8 진수를 요구하며 앞에 0이 붙습니다. 그리고 정수형으로 char을 출력 할 때 print 전에 int로 넓혀진다. –

+0

출력이 000000f7이 아닌 이유 –

답변

4

시스템이 작은 엔디안이기 때문에, aF7 FF FF FF로 메모리에 저장됩니다.

ba의 첫 번째 바이트를 가리 킵니다. (F7)

*bchar으로 평가된다. 그것은 FFFFFFF7되기 위해 연장 된 표시이다 (signed char 통상 디폴트) char 타입의 이후 (F7)

*b은 매개 변수로 전달하기위한, int로 승격된다.

1
+-----------------------+ 
| F7 <--b=(char *) &a| 
| FF     | 
| FF     | 
| FF     | 
|      | 
+-----------------------+ 


printf("%08x",*b); 

// 수단 : 정수 유형으로 문자를 인쇄 할 때

  1. *b는 (F7)

  2. %08x

    16 진수 요구되는 값 B 포인터를 묻는 것이 이고 인쇄하기 전에으로 확장되었습니다. (FFFFFF7 현재)

+4

nope.b가 F7이 아님 FF – TGO

+0

@TGO이 stuip 실수로 유감입니다. –

+0

중요한 것은 그것을 정렬 한 것입니다. :) – TGO

관련 문제