4.8 변환 지정자의 수식어들 modifiers

공기훈·2021년 7월 27일
0

홍정모의 따배씨

목록 보기
11/49

'+' : (flag) 왼쪽에 붙여서 출력
10 : 최소 10자리
5 : 정밀도
hi : conversion specifier

Flag & Width

%10 너비가 10. 총 10자리가 안 된다면 남는 자리는 빈칸으로..
%- 붙이면 왼쪽으로 딱 붙임.
%+ 붙이면 양수도 무조건 + 붙여줌.
%(space)로 놔두면 양수에는 + 안 붙은 상태로 출력.

%X 16진수로 출력.
%#X 0X 붙여서 출력. 이 경우는 16진수로 출력.
%05i 너비는 5, 남는 자리는 빈칸 대신 0으로 채움.
%*i 앞의 숫자가 별 자리에 들어감. 여기선 7이 들어가서 %7i 꼴이 된다. 그러면 너비는 7이고, 왼 쪽의 남는 네 자리는 빈칸으로 둔다.

#include <stdio.h>
#include <limits.h>

int main()
{
	printf("%10i\n", 1234567); 		//   1234567
	printf("%-10i\n", 1234567); 		//1234567

	printf("%+i %+i\n", 123, -123); 	//+123 -123
	printf("% i \n % i \n", 123, -123); 	//123 
						//-123
	printf("%X\n", 17); 			//11
    					// 16진수
	printf("%#X\n", 17); 			//0X11 
	printf("%05i\n", 123); 			//00123
	printf("%*i\n", 7, 456); 		//    456

}

Precision

%.(number)d : 정밀도의 최소 숫자. 3이면 최소 3자리 이상 출력되어야 함. 1024는 4자리 이므로 그대로 출력. 5가 오면 4자리의 1024 앞에 0으로 채워줌.
%.(number)f : float와 함께 사용되면 의미가 약간 달라진다. f는 소숫점의 아래의 자리 수를 의미한다. 3이 오면 소숫점 아래에 반올림된 3자리의 수가 출력되어야 한다.
%(n1).(n2)f n1은 너비, n2는 정밀도를 나타냄.
%.(number)s string의 경우는 string의 너비를 제한함. 5면 ABCDE까지만 출력. 숫자를 안 넣게 되면 0과 동일하게 인식. 그러므로 아무것도 출력되지 않는다.

int main()
{
	printf("\nPrecision\n");
	printf("%.3d\n", 1024);			//1024
	printf("%.5d\n", 1024);			//01024
	printf("%.3f\n", 123456.1234567);	//123456.123
	printf("%.3f\n", 123456.1235);		//123456.124
	printf("%10.3f\n", 123.45678);		//   123.457
	printf("%010.3f\n", 123.45678);		//000123.457
	printf("%.5s\n", "ABCDEFGHIJKLMN");	//ABCDE
	printf("%.s\n", "ABCDEFGHIJKLMN");
}

Length

hhd 에 257을 넣었으므로 overflow 발생.
아래의 예제 같은 경우는 x86, x64에 따라 다른 값이 출력된다.

int main()
{
	printf("\nPrecision\n");
	printf("%hhd %hd %d\n", 257, 257, 257); //1 257 257
	printf("%d %lld %lld\n", INT_MAX + 1, INT_MAX + 1, 2147483648LL); 	
    //-2147483648 2147483648 2147483648 (x64)
    //-2147483648 -9223372034707292160 21972790693330944 (x86)
	return 0;
}
profile
be a coding master

0개의 댓글