본문 바로가기

Study_C, C++/홍정모의 따라하며 배우는 C언어

[홍정모의 따라하며 배우는 C언어] 4.6 명백한 상수들 ~ 4.8 변환 지정자의 수식어들

728x90

4.6 명백한 상수들

  • 명백한 상수(Manifest Constants) : #define(전처리기)를 이용해서 선언이 된 기호적 상수
#include <stdio.h>
#include <limits.h>		// INT_MAX, ... , etc	-> 정수의 표현 범위를 알려줌
#include <float.h>		// FLT_MAX, ... , etc	-> 실수의 표현 범위를 알려줌

#define PI 3.141592		// manifest constants, symbolic constants

int main()
{
	printf("PI is %f\n", PI);
	printf("Biggest int : %d\n", INT_MAX);
	printf("One byte in this system is %d bits\n", CHAR_BIT);
	printf("Smallest normal float %e\n", FLT_MIN);

	return 0;
}

 

Output :
PI is 3.141592
Biggest int : 2147483647
One byte in this system is 8 bits
Smallest normal float 1.175494e-38

 

 

4.7 printf() 함수의 변환 지정자들

  • 변환 지정자  : 형식 지정자(%d, %f)중 자료형을 어떤 형식으로 출력할지 맞춰주는 것

변환 지정자 예시

 

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

int main()
{
	double d = 3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679;

	printf("%c\n", 'A');
	printf("%s", "I love you\n");
	printf("Even if there`s a small chance, \
we owe this to everyone who`s not in this room to try.\n");
	// 출력하려는 문장이 너무 길 때는 \를 사용함 (줄바꿈 X)

	printf("\n");
	printf("%d %i %i %i\n", 1004, 1234, INT_MAX, UINT_MAX);
  	 // Note overflow -> unsigned int 표현 범위의 값을 singed int형으로 표현하려 함
	printf("%u %u %u\n", 1024, -1, UINT_MAX);			
    	// Note overflow -> unsigned int에 -1을 집어넣음

	printf("\n");
	printf("%f %f %lf\n", 3.141592f, d, d);		
  	 // l in %lf if ignored -> 전통적인 이유로 printf문 내부에서 float을 출력하려 
    	// 하면 double로 바꿔버림 -> %f는 double을 출력하는 specifier가 됨
	printf("%a %A\n", d, d);		// 부동소수점수 출력
	printf("%e %E\n", d, d);

	printf("\n");
	printf("%g %g\n", 123456.789, 1234567.89);	// 값에 따라서 %f, %e중 뭘 사용할지 결정
	printf("%G %G\n", 123456.789, 1234567.89);
	printf("%g %g\n", 0.00012345, 0.000012345);
	printf("%G %G\n", 0.00012345, 0.000012345);

	printf("\n");
	printf("%o\n", 9);			// 8진수 출력
	printf("%p\n", &d);			// pointer-of operator -> d의 주소값 출력

	printf("\n");
	printf("%x %X\n", 11, 11);		// 16진수 출력
	printf("%%\n", d);			// Note the warning. d is ignored

	printf("\n");
	printf("%9d\n", 12345);			// 앞에 숫자가 들어가면 자릿수를 맞춰줌 -> 최소 9칸을 쓰게 함
	printf("%09d\n", 12345);		// 빈칸에 0을 집어넣음
	printf("%.2f\n", 3.141592);		// 소수점 이하 2자리만 출력
	printf("%.20f %.20lf\n", d, d);		// f와 lf는 동일한 출력

	printf("\n");
	int n_printed = printf("Counting!");	// printf함수도 return value가 있음 -> printf가 출력한 글자 갯수
	printf("\n%u\n", n_printed);		// counting의 숫자 갯수 출력

	return 0;
}

 

Output :
A
I love you
Even if there`s a small chance, we owe this to everyone who`s not in this room to try.

1004 1234 2147483647 -1
1024 4294967295 4294967295

3.141592 3.141593 3.141593
0x1.921fb54442d18p+1 0X1.921FB54442D18P+1
3.141593e+00 3.141593E+00

123457 1.23457e+06
123457 1.23457E+06
0.00012345 1.2345e-05
0.00012345 1.2345E-05

11
005CF79C

b B
%

    12345
000012345
3.14
3.14159265358979311600 3.14159265358979311600

Counting!
9

 

 

4.8 변환 지정자의 수식어들

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

int main()
{
	printf("%10i\n", 1234567);		// 10칸 사용
	printf("%-10i\n", 1234567);		// 왼쪽 정렬 (오른쪽 정렬이 기본)
	printf("%+i %+i\n", 123, -123);		// 숫자 앞에 부호 붙임
	printf("% i \n% i\n", 123, -123);	// 양수일 땐 빈칸, 음수일 땐 -를 숫자 앞에 붙임
	printf("%X\n", 17);					
	printf("%#X\n", 17);			// 0X를 숫자 앞에 붙임
	printf("%05i\n", 123);			// 남는 칸에 0을 집어넣음
	printf("%*i\n", 7, 456);		// * -> 앞 숫자가 *자리로 들어감. width를 controll string 밖에서 바꿈

	printf("\nPrecision\n");			
	printf("%.3d\n", 1024);			// .3 -> 최소 숫자 갯수가 3개
	printf("%.5d\n", 1024);			// .숫자 는 정수와 실수형 자료형에 사용될 때 의미가 달라짐
	printf("%.3f\n", 123456.1234567);	// 소수점 뒤 3자리까지 출력. 잘리기 전 숫자 반올림
	printf("%.3f\n", 123456.1235);		
	printf("%10.3f\n", 123.45678);		// 10칸중 3칸을 소숫점 표현에 씀
	printf("%010.3f\n", 123.45678);
	printf("%.5s\n", "ABCDEFGHIJKLMN");	// 5글자만 출력
	printf("%.s\n", "ABCDEFGHIJKLMN");	// 0글자 출력

	printf("\nLength\n");
	printf("%hhd %hd %d\n", 257, 257, 257);	// %hhd 일 때 overflow 발생
	printf("%d %lld %lld\n", INT_MAX + 1, INT_MAX + 1, 214783648LL);
	// %d일 때 overflow. %lld의 출력값이 x64와 x86일 때 결과가 다름

	return 0;
}

 

Output :
   1234567
1234567
+123 -123
 123
-123
11
0X11
00123
    456

Precision
010
01024
123456.123
123456.124
   123.457
000123.457
ABCDE


Length
1 257 257
-2147483648 922488746023059456 7617566881087488 -> x86일 때
-2147483648 2147483648 214783648	-> x64일 때

 

 


강의 출처 : https://www.inflearn.com/course/following-c/dashboard

 

홍정모의 따라하며 배우는 C언어 - 인프런 | 강의

'따배씨++'의 성원에 힘입어 새롭게 개발된 C 언어로 시작하는 프로그래밍 입문 강의입니다. '따배씨'와 함께 프로그래밍 인생을 업그레이드 해보세요., 따라하며 배우는 C언어 '따배씨++'의 성원

www.inflearn.com