데이터 타입(Data Type, 자료형)
데이터 타입이란 프로그램 실행 과정에서 쓰이는 데이터가 어떤 종류의 데이터인지를 나타내는 것으로, 자료형이라고도 부른다. 기본적인 종류로는 int, float, char가 있다.
자료형 명칭 | 의미 | ||
수 | 정수형 | int | integer (정수) |
실수형 | float | floating point (부동소수점) 2021/02/09 - [C] - 고정소수점과 부동소수점 |
|
수, 문자 | 정수형 | char | character (글자, 부호) |
int, float은 수 데이터를 다루는 데이터 타입으로 정수를 다루는 정수형과 실수를 다루는 실수형으로 나뉜다. 수학에서는 정수가 실수의 범주에 포함되지만 여기서 실수는 정수가 아닌 실수. 즉, 소수점 아래 수가 있는 실수를 뜻한다.
이들을 하나의 '수를 다루는 데이터 타입'으로 묶지 않고 구별하는 이유는 메모리 할당 방법에 있어 정수와 실수 처리 방식이 다르기 때문이다. 데이터를 저장하는 데 있어 서로 방식이 다르기에 미리 어떤 형태의 데이터인지 알려주어야 이에 맞는 준비를 할 수 있을 것이다. 이를 위해 정수와 실수를 구별하여 사용하는 것이다.
위 표에서 char만이 문자를 다룰 수 있는 데이터 타입이다. 이때 문자는 문장이나 단어가 아니라 단 한 자의 문자를 뜻한다. 문자나 단어 같이 여러 문자들로 이루어진 데이터를 다룰 때에는 변수, 상수 선언 방법이 아니라 문자열 선언을 하여, 배열을 이용한다. 한 자 한 자의 char 데이터가 모여 두 자 이상의 단어가 만들어지기 때문이다.
그렇지만 char는 정수형 데이터 타입으로, 문자형 데이터 타입이라고 부르지 않는다. 기본적으로 정수를 다루는데, 우리는 문자를 저장해야 할 상황이 있기에 아스키(ASCII) 코드에 따라 문자를 숫자로 치환해서라도, 문자를 다룰 수 있도록 만든 것이다. 컴퓨터는 여전히 문자를 문자 그대로 저장하는 것이 아니라 문자를 숫자로 이해, 표현한다. 대표적으로 문자 A의 아스키 코드 값은 65이다.
char chr1 = 65; |
char chr1 = 'A'; printf("%c %d", chr1, chr1); |
그래서 두 코드 모두 실행시키면 A 65 로 같은 결과가 나오게 된다.
다양한 데이터 타입과 메모리 크기
위에서 소개한 세 가지 데이터 타입은 정수형, 실수형, char의 기본 개념을 정리하기 위해 설명한 가장 기본적인 자료형이다. 이 외에도 다양한 정수형, 실수형 자료형들이 많다. 이들은 메모리 크기와 값의 표현범위에 따라 구분된다.
자료형 | 데이터 크기(byte) | 다룰 수 있는 수의 범위 | |
정수형 | char | 1 | -128≤ x ≤127 |
short | 2 | -32768≤ x ≤32767 | |
int | 4 | -2147483648≤ x ≤2147483647 | |
long | 4 | ||
long long | 8 | -9223372036854775808≤ x ≤9223372036854775807 | |
실수형 | float | 4 | ±3.4E-37≤ x ≤±3.4E38 |
double | 8 | ±1.7E-307≤ x ≤±1.7E308 | |
long double | 8이상 | double 이상 |
다룰 수 있는 수의 범위의 끝과 끝 수의 값은 아무 의미없는 수가 아니다. 1byte는 8bit이기에 1byte의 경우 2^8의 수를 나타낼 수 있으며 2^8의 값은 256이다. 256개의 수를 다룰 수 있기에 음수 -128부터 양수 127까지가 char가 다룰 수 있는 수의 범위인 것이다. 다른 자료형의 표현 가능 수의 범위도 같은 방식으로 정해진다. 다만, 이 수는 컴파일러 마다 조금씩 다르기도 하다.
C언어는 오래 전부터 쓰인 프로그래밍 언어라는 점에서도 의미가 있지만 이를 공부하면서 컴퓨터에서 메모리가 어떤 구조에서, 어떻게 저장되고 사용되는지 이해할 수 있다는 점에 있어 의의가 있는 프로그래밍 언어이다. sizeof 연산자를 이용하여 각 데이터타입의 크기를 구하는 것이 단순노동이라고 여겨질 수도 있겠지만 이는 이후 포인터와 메모리관리에 대하여 학습을 할 때 필요한 부분이다. 어렵지도 않으니 그때를 위해 한 번 짚고 넘어가는 게 좋은 것 같다.
'C' 카테고리의 다른 글
배열에서 최댓값 인덱스 찾기 (0) | 2021.06.02 |
---|---|
배열 (0) | 2021.06.01 |
고정소수점과 부동소수점 (1) | 2021.02.09 |
확장열(Escape Sequence, 제어 시퀀스, 특수문자, 이스케이프시퀀스) (0) | 2021.01.14 |
printf 함수 (0) | 2021.01.04 |