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
'Study_C, C++ > 홍정모의 따라하며 배우는 C언어' 카테고리의 다른 글
[홍정모의 따라하며 배우는 C언어] 4.10 scanf() 함수의 사용법 ~ 5.2 대입 연산자와 몇 가지 용어들 (0) | 2021.08.22 |
---|---|
[홍정모의 따라하며 배우는 C언어] 4.9 printf() 함수가 인자들을 해석하는 과정 (0) | 2021.08.19 |
[홍정모의 따라하며 배우는 C언어] 4.3 문자열이 메모리에 저장되는 구조 ~ 4.5 기호적 상수와 전처리기 (0) | 2021.08.16 |
[홍정모의 따라하며 배우는 C언어] 3.13 불리언형 ~ 4.2 sizeof 연산자 (0) | 2021.08.13 |
[홍정모의 따라하며 배우는 C언어] 3.11 부동소수점형 ~ 3.12 부동소수점형의 한계 (0) | 2021.08.12 |