C 언어에서 사용하는 대표적인 데이터 타입으로는 정수(int), short int, 부호 있는(signed) 및 부호 없는(unsigned) char 등이 있습니다. 이 글에서는 각 데이터 타입의 특징과 함께 저장 크기, 표현 가능한 값의 범위를 표 형식으로 정리하고, 이를 실제로 확인할 수 있는 C 프로그램까지 소개합니다.
데이터 타입(Data Type)이란?
데이터 타입은 변수에 저장할 수 있는 값의 집합과 데이터의 종류를 지정하는 요소입니다. 프로그래머는 응용 프로그램의 요구 사항에 맞는 적절한 데이터 타입을 선택하여 사용할 수 있습니다.
C 언어의 데이터 타입은 다음과 같이 분류됩니다.
- 기본 데이터 타입(Primary data types)
- 유도 데이터 타입(Derived data types)
이 글에서는 그중 기본 데이터 타입에 대해 자세히 알아보겠습니다.
기본 데이터 타입(Primary Data Types)
C 컴파일러는 네 가지 기본 데이터 타입을 지원합니다.
- 정수형(Integer)
- 문자형(Character)
- 실수형(Floating-point)
- 배정도 실수형(Double precision floating point)
정수 계열 데이터 타입(Integral Data Type)
정수 계열 데이터 타입은 정수와 문자를 저장하는 데 사용되며, 다음 두 가지로 세분화됩니다.
- 정수형 데이터 타입(Integer data type)
- 문자형 데이터 타입(Character data type)
정수형 데이터 타입(Integer Data Type)
정수형 데이터 타입은 소수점이 없는 정수를 저장하는 데 사용됩니다. 저장 크기에 따라 short int, int, long int의 세 종류가 있으며, 각각 부호 있는(signed) 형태와 부호 없는(unsigned) 형태로 나뉩니다.
| 정수형 데이터 타입 | |||
|---|---|---|---|
| 타입 | 크기(바이트) | 범위 | 서식 지정자 |
| short int (signed short int) | 2 | -32,768 ~ 32,767 | %hd |
| unsigned short int | 2 | 0 ~ 65,535 | %hu |
| int (signed int) | 4 | -2,147,483,648 ~ 2,147,483,647 | %d 또는 %i |
| unsigned int | 4 | 0 ~ 4,294,967,295 | %u |
| long int (signed long int) | 4 | -2,147,483,648 ~ 2,147,483,647 | %ld |
| unsigned long int | 4 | 0 ~ 4,294,967,295 | %lu |
문자형 데이터 타입(Character Data Type)
문자형 데이터 타입은 문자 하나를 저장하는 데 사용됩니다. 내부적으로는 문자가 정수 형태로 저장되며, 각 문자에는 고유한 ASCII 코드 값이 대응됩니다.
예를 들어, 문자 'A'의 ASCII 값은 65입니다.
| 문자형 데이터 타입 | |||
|---|---|---|---|
| 타입 | 크기(바이트) | 범위 | 서식 지정자 |
| char (signed char) | 1 | -128 ~ 127 | %c |
| unsigned char | 1 | 0 ~ 255 | %c |
실수형 데이터 타입(Floating-point Data Types)
- 소수점이 있는 실수를 저장하는 데 사용됩니다.
- 소수점 이하 6자리 수준의 정밀도가 필요하면 float를 사용합니다.
- 12자리 수준의 정밀도가 필요하면 double을 사용합니다.
- 12자리를 초과하는 정밀도가 필요하면 long double을 사용합니다.
| 실수형 데이터 타입 | |||
|---|---|---|---|
| 타입 | 크기(바이트) | 범위 | 서식 지정자 |
| float | 4 | 3.4E-38 ~ 3.4E+38 | %f |
| double | 8 | 1.7E-308 ~ 1.7E+308 | %lf |
| long double | 16 | 3.4E-4932 ~ 1.1E+4932 | %Lf |
예제 프로그램
다음은 limits.h 헤더 파일에 정의된 상수를 활용하여 기본 데이터 타입별 최솟값과 최댓값을 출력하는 C 프로그램입니다.
#include<stdio.h>
#include<limits.h>
int main(){
printf("DATA TYPE\t\t RANGE\n");
printf("-----------\t\t---------\n");
printf("short min\t\t%d\n",SHRT_MIN);
printf("short max int\t\t%d\n",SHRT_MAX);
printf("int min\t\t\t%d\n",INT_MIN);
printf("int max\t\t\t%d\n",INT_MAX);
printf("Char min\t\t%d\n",CHAR_MIN);
printf("Char max\t\t%d\n",CHAR_MAX);
printf("long min\t\t%ld\n",LONG_MIN);
printf("long max\t\t%ld\n",LONG_MAX);
printf("unsigned char\t\t%u\n",UCHAR_MAX);
printf("unsigned long\t\t%lu\n",ULONG_MAX);
printf("unsigned int\t\t%u\n",UINT_MAX);
printf("unsigned short\t\t%u\n",USHRT_MAX);
}실행 결과
프로그램을 실행하면 다음과 같은 결과가 출력됩니다.
DATA TYPE RANGE ----------- --------- short min -32768 short max int 32767 int min -2147483648 int max 2147483647 Char min -128 Char max 127 long min -2147483648 long max 2147483647 unsigned char 255 unsigned long 4294967295 unsigned int 4294967295 unsigned short 65535
이처럼 limits.h에 정의된 상수(SHRT_MIN, INT_MAX 등)를 사용하면 컴파일 환경에 따라 달라질 수 있는 각 데이터 타입의 실제 범위를 손쉽게 확인할 수 있습니다.