Post

[C] 데이터타입과 서식지정자

📌 들어가며

변수를 선언할 때 앞에 붙이던 int, 출력할 때 쓰던 %d. 이번 글에서는 이 데이터 타입서식 지정자(format specifier)를 정리하고, 타입의 용량을 넘어설 때 벌어지는 오버플로우까지 살펴본다.


1. C의 데이터 타입

C의 기본 데이터 타입은 다음과 같다. (1byte = 8bit)

타입크기종류비고
char1 byte문자(정수)문자 하나
short2 byte정수 
int4 byte정수가장 일반적
long4 byte정수시스템마다 다름
float4 byte실수 
double8 byte실수float보다 정밀

변수를 선언할 때 쓰던 int도 이 중 하나다.


2. 서식 지정자 (format specifier)

printf의 포맷 문자열 안에 들어가는 서식 지정자들이다.

서식 지정자의미
%d10진수 정수로 출력
%c문자로 출력
%f실수로 출력
%x16진수 정수로 출력
%%% 문자 자체를 출력

정수(%d)와 문자(%c)를 각각 출력해 보자. (문자는 홑따옴표 ' '를 쓴다.)

1
2
3
4
int Number = 10;
char ch1 = 'a';
printf("%d\n", Number);   // 줄바꿈(\n)을 넣어 가독성 확보
printf("%c\n", ch1);

Desktop View

Desktop View

💡 \n 없이 이어 출력하면 10a처럼 붙어 나와 가독성이 떨어진다. 출력 사이에 줄바꿈(\n)을 넣어주자.


3. 정수 타입의 용량과 오버플로우

정수 타입은 크기에 따라 담을 수 있는 값의 범위가 다르다. 1byte(8bit)는 2^8 = 256가지를 표현한다.

타입표현 범위
char−128 ~ +127
short−32,768 ~ +32,767
int−2,147,483,648 ~ +2,147,483,647

그렇다면 char에 범위를 넘는 128을 넣고 %d로 출력하면? 놀랍게도 −128이 나온다. 바로 오버플로우(overflow) 때문이다.

1
2
3
4
5
6
7
8
char 타입은 마치 시계처럼 순환한다.

  ... 125  126  127 ─┐
                     │ (127 다음은 처음으로)
  ...-126 -127 -128 ◄┘

127 다음 → -128   (그래서 128 입력 → -128 출력)
같은 원리로 129 입력 → -127 출력

Desktop View

Desktop View

⚠️ 타입마다 담을 수 있는 범위가 정해져 있다. 필요한 곳에 알맞은 타입을 골라 써야 오버플로우 같은 함정을 피할 수 있다.


4. 실수 타입 — 정밀도의 차이

실수 타입 float(4byte)과 double(8byte)의 차이는 정밀도다.

타입크기정밀도
float4 byte소수점 6~9자리
double8 byte소수점 15~18자리

출력할 소수점 자릿수는 서식 지정자에 .x를 붙여 제어한다.

1
printf("%.2f\n", 3.14159);   // 3.14 (소수점 2자리까지)
  • %.2f → 소수점 둘째 자리까지 표현한 실수 서식 지정자.

📝 정리

개념한 줄 정의
데이터 타입값의 종류와 크기를 정하는 것 (char~double)
서식 지정자printf에서 값의 출력 형식을 지정 (%d, %c, %f…)
오버플로우타입 범위를 넘으면 시계처럼 순환해 반대편 값이 됨
정밀도float(6~9자리) < double(15~18자리)

타입은 “값의 종류와 크기”를, 서식 지정자는 “그 값을 어떻게 출력할지”를 정한다. 이 둘을 맞춰 쓰는 것이 C 출력의 기본이다.

This post is licensed under CC BY 4.0 by the author.

Comments powered by Disqus.