들어가며
C언어에서 데이터를 출력할 때, 같은 데이터를 출력하더라도 다르게 표시되는 일들이 있다.
예를 들어 숫자 10을 가지고도 10진수, 8진수, 16진수, 문자 등으로 다양하게 출력할 수 있다.
이는 컴퓨터의 내부적인 연산은 2진수로 일어나고, 사용자에게 보여줄 때만 출력 형식에 맞추어 보여주기 때문이다.
오늘은 자료형별 출력 형식에 대해서 정리하고자 한다.
자료형 및 출력 형식 표
구분 | 자료형 | 바이트 | 표현 범위 | 출력 형식 (서식 문자) |
의미 | 사용 예시 | 결과 |
정 수 형 |
char | 1 | -128~127 | %c | 1개 문자 출력 | char c = 97; printf("%c", c); |
a |
%d | 10진 정수 출력 | char c = 97; printf("%d", c); |
97 | ||||
unsigned char | 1 | 0~255 | %c | 1개 문자 출력 | unsigned char c = 97; printf("%c", c); |
a | |
%u | 부호없는 10진 정수 출력 | unsigned char c = 200; printf("%d", c); |
200 | ||||
short | 2 | -32,768~ 32,767 |
%d, %hd | 10진 정수 출력 | short s = 32000; printf("%hd", s); |
32000 | |
unsigned short | 2 | 0~65,535 | %u, %hu | 부호없는 10진 정수 출력 | unsigned short s=60000; printf("%hu", s); |
60000 | |
int | 4 | -2,147,483,648~ 2,147,483,647 |
%d | 10진 정수 출력 | int i = 1234567890; printf("%d", i); |
1234567890 | |
unsigned int | 4 | 0~4,294,967,295 | %u | 부호없는 10진 정수 출력 | unsigned int i=3234567890U; printf("%u", i); |
3234567890 | |
long | 4 | -2,147,483,648~ 2,147,483,647 |
%ld(≒%d) | 10진 정수 출력 | long l = 1234567890L; printf("%ld", l); |
1234567890 | |
unsigned long | 4 | 0~4,294,967,295 | %lu(≒%u) | 부호없는 10진 정수 출력 | unsigned long l=3234567890UL; printf("%lu", l); |
3234567890 | |
long long | 8 | -9,223,372,036, 854,775,808~ 9,223,372,036, 854,775,807 |
%lld | long long형 10진 정수 출력 |
long long ll = 9223372036854775807LL; printf("%lld", ll); |
9223372036854775807 | |
unsigned long long |
8 | 0~18,446,744,073, 709,551,615 |
%llu | 부호없는 long long형 10진 정수 출력 | unsigned long long ll = 9223372036854775808ULL; printf("%llu", ll); |
9223372036854775808 | |
실 수 형 |
float | 4 | 1.175494e-38~ 3.402823e+38 |
%f | float형 소수 출력 |
float f = 3.1415926535f; printf("%1.7f", f); |
3.1415927 |
double | 8 | 2.225074e-308~ 1.797693e+308 |
%lf | double형 소수 출력 |
double lf = 3.141592653589793238; printf("%1.15lf", lf); |
3.141592653589793 | |
long double | 8 | 2.225074e-308~ 1.797693e+308 |
%Lf | long double형 소수 출력 |
long double llf = 3.141592653589793238l; printf("%1.15llf", llf); |
3.141592653589793 |
주목해야 할 점
- 어차피 아스키 코드의 문자는 7비트 인코딩 방식이기 때문에 0~127로 표현되며,
unsigned char를 쓰던 signed char를 쓰던 똑같이 출력이 가능하다. - int와 long은 동일한 메모리를 잡아먹고 동일한 결과를 보여준다.
하드웨어나 OS 의존성이 있지 않는 이상은 같은 자료형이라고 봐도 무방하다.
double과 long double과의 관계도 비슷하다. - 리터럴을 표기해줘야 하는 형들이 있다.
리터럴은 데이터의 크기를 접미사를 이용하여 명시적으로 표기해주는 기능이다.
float f = 3.1415926535f;에서 f와 같은 것이다.
데이터 타입 | 리터럴 |
unsigned int | U |
long | L |
unsigned long | UL |
long long | LL |
unsigned long long | ULL |
float | f |
double | 없음 |
long double |
Lf |
double형은 리터럴이 있을 것 같지만 없다는 것을 기억하자.
참고) 아스키 코드 표
https://ko.wikipedia.org/wiki/ASCII
'C++ > C Basic' 카테고리의 다른 글
[C언어] 이중포인터, 더블포인터 설명 (0) | 2020.10.05 |
---|---|
[C언어] 포인터 쉽게 이해하기 (1) | 2020.10.05 |
[C언어] 배열 길이 구하기 (0) | 2020.10.05 |
[C언어] 프로그램 처리 시간, 걸린 시간 구하기 (0) | 2020.10.05 |
[C언어] 이스케이프 코드 출력 정리 (0) | 2020.06.20 |
댓글