* 출처 : http://www.devpia.com/MAEUL/Contents/Detail.aspx?BoardID=50&MAEULNo=20&no=549748&ref=549748




=============================================================================================

▲ 질문내용

 

1. 우선 %p 와 %x의 차이점이 무엇인지 알고 싶네요.

 

     %p도 16진수로 표현 %x도 16진수로 표현. 같은 용도인데 왜 따로 사용하는 사례가 있을까요?

     다른점이 있다면 %p는 빈공간에 0을 넣어서 출력하며 대문자더군요.

     (8자리 출력인 것 보면 주소 값 출력과도 관계가 있는 것 같은데요 ㅠㅠ)

 

2.  출력명령문의 #는 무엇을 하는 녀석입니까?

 

     그리고 #을 사용하게 되면

     0x라는 값이 출력됩니다. 0x는 도대체 뭔지요 ㅠ_ㅠ; 16진수일 때만 나오는군요.

 

▲ 소스

 

main()

{

    int a = 100;

 

// 1. %x#사용 a변수의 주소를 16진수로 표현(10자리로 표현하며 빈공간에는 0을 넣어라)

    

    printf("%#010x\n", &a);

 

// 2. %x사용 a변수의 주소를 16진수로 표현   

 

    printf("%x\n", &a);

 

// 3. %x사용 a변수의 값을 16진수로 표현

 

    printf("%x\n", a);

 

// 4. %p사용 a변수의 주소를 16진수로 표현

 

    printf("%p\n", &a);

 

// 5. %p사용 a변수의 값을 16진수로 표현

 

    printf("%p\n", a);

}

 

결과값

 

1. 0x0012ff7c                     <---- %x 와 #사용. 주소 10자리로 출력 빈공간에는 0을 넣었음.

2. 12ff7c                           <---- %x 를 사용 주소 출력.

3. 64                                <---- %x 를 사용 값 출력.

4. 0012FF7C                     <----- %p 를 사용 주소 출력.

5. 00000064                       <---- %p 를 사용 값 출력.



=============================================================================================


%x 에서 %#x 는 0x 를 붙이라는 뜻이구요, (사용하는 사람이 많지는 않은듯 하네요)

%p 는 포인터 크기 만큼 메모리를 읽어서, 16진수로 표시합니다.

 

아래는 MSDN 에서 뽑아왔습니다.

 

%[flags] [width] [.precision] [{h | l | I | I32 | I64}]type

flags : '-', '+', '0', ' ', '#'

    '-' : 오른쪽 정렬

    '+' : 부호 붙임 (- 또는 +)

    '0' : 앞자리에 0 을 붙임

    ' ' : 앞자리에 공백출력

    '#' : o,x,X 와 같이 쓰일경우 진수 표시. (0, 0x, 0X)

          e,E,f,g,G 와 같이 쓰일 경우 소수점 아래 무조건 표시

width : 전체 길이

.precision : 정밀도.. 일반적으로 f 와 같이 쓰이나, s 와 같이 쓰일경우 길이를 강제로 맞출때 사용. d,x 등 기타 다른 플래그도 동일.

    ex: printf("%.5s", "abcdefghijklmn"); --> "abcde" 만 찍힘. (지원안되는 컴파일러도 있음)

h,l,I,I32,I64 :

    h : short 크기만 읽음

    l : long 크기

    I : int 크기

    I32 : 4 바이트 크기 강제

    I64 : 8 바이트 크기 강제

        w : 2byte character

 

type : d,f,x.p... 등 타입은 다 알고 계실거구요...


 

+ Recent posts