본문 바로가기
C, C++/문법 정리

[C언어]자료형에 대해 알아보자

by hseoy 2020. 4. 24.
반응형

[자료형에 대해 알아보자]

사실 지난 글에서 다룬 주제인 '변수'는 '자료형'이라는 개념을 이해해야만 완전히 이해할 수 있는 개념이였다.

우선 변수에 대해서 다시한번 이야기 해보자면 변수는 변할 수 있는 값을 저장할 수 있는 공간 그 자체를 가리키는 개념이였다. 우리가 변수를 선언한다는 것은 어떠한 크기의 메모리를 우리가 자유롭게 값을 쓰고 지우고를 하겠다고 프로그램을 실행하는 주체인 운영체제에게 알려주는 거라고 볼 수 있다.

여기서 중요한 것은 '어떠한 크기'의 메모리인지 어떻게 표현하는 가이다. 운영체제에게 메모리를 할당해달라고 요청하기 위해서는 얼마만큼의 메모리를 어떻게 사용할 것인지를 알려줘야만 한다. 여기서 등장하는 개념이 '자료형 Data Type'이다.

1바이트의 메모리를 사용하겠다, 2바이트의 메모리를 사용하겠다 등을 표현할 문법이 필요한 데, C언어는 자주 사용하는 자료형을 예약어어로 제공(Built-in Data Type)하고, 나머지는 사용자가 직접 만들어서 사용할 수 있는 문법(User-defined Data Type)을 제공한다.

예약어로 제공되는 자료형의 크기는 1바이트, 2바이트, 4바이트, 8바이트 등이다. 각 자료형은 자료형이 표현할 수 있는 값의 범위만큼의 값만을 메모리에 담을 수 있다.

자료형  크기 값의 표현 범위
정수형 char 1바이트(8비트) -128이상 +127이하
short 2바이트(16비트) -32768이상 +32767이하
int 4바이트(32비트) -2147483648이상 +2147483647이하
long 4바이트(32비트) -2147483648이상 +2147483647이하
long long 8바이트(64비트) -9223372036854775808이상 +9223372036854775807이하
실수형 float 4바이트(32비트) ±3.4x10^-37이상 ±3.4x10^38이하
double 8바이트(64비트) ±1.7x10^-307이상 ±3.4x10^308이하
long double 8바이트 이상 double 이상의 표현범위
명칭 설명
signed 부호가 있는 변수. 부호를 표현하지 않으면 기본적으로 signed가 적용된다.
unsigned 부호가 없는 변수. 음수를 표현할 수 없고, 양수 값의 표현 범위가 두 배 정도 늘어난다.

이제 위 표을 자세히 살펴보자. 자료형은 크게 정수형과 실수형으로 나뉘고 정수형은 부호가 있는 자료형(signed)과 부호가 없는 자료형(unsigned)으로 다시 한번 나뉜다.

정수형은 말 그대로 정수를 표현하는 데 사용되며, 특히 char형은 문자(character)를 표현하는 데 주로 사용된다. 실수형은 정수가 아닌 소수와 같은 실수를 표현하는 데 사용된다. 

정수형의 경우, 위 표에 표현된 명칭은 생략된 형태임을 기억해야 한다. char형의 경우 기본적으로 signed char를 의미하며 부호가 없는 자료형을 표현하기 위해서는 unsigned char와 같이 표현해야 한다. 이외에도 short 형은 원래 signed short int형이며 가장 자주 쓰는 생략된 형태가 short형이다. 그리고 위에서 long형과 int형은 같은 것으로 표현하였는데 이는 근본적인 형태가 같기 때문이다. int와 long형 모두 원래 형태는 signed long int형이며, int형은 부호와 기본 단위 long을 생략한 것이고 long형은 부호와 int를 생략한 형태이다.

64비트 크기의 정수 자료형으로 __int64와 long long int가 있으나 이 자료형들은 컴파일러 종류나 버전에 따라 제공될 수도, 제공되지 않을 수도 있다.

실수형에서 알아두어야 할 것은 부동 소수점(Floating-point) 표현 방식을 사용한다는 것이다. 이것은 실수를 표현할 때 소수점의 위치를 고정하지 않고 소수점의 위치를 나타내는 수를 따로 적는 방식이다. 예를 들어 123.456이라고 실수를 표현하기도 하지만 유효 숫자와 자릿수를 좀 더 잘 인식할 수 있도록 1.23456 x 10^2라고 적기도 한다. 이렇게 되면 저장해야 할 정보가 정확하게 둘로 나뉘어져 편리하게 된다. 부동소수점 표현 방식에서는 1.23456을 가수부, 10^2에서 2를 지수부라고 한다. 그리고 C언어에서는 이 표현을 1.23456E2라고 표현한다. E2는 10^2를 의미한다. 그리고 실수형의 각 자료형은 표현할 수 있는 유효 자릿수가 존재한다. float형의 경우 소수점 이하 6자리가 넘어가는 숫자부터는 정확성을 보장할 수 없기 때문에 소수점 이하 6자리 이상 사용하려면 8바이트(64비트) 기반의 double 자료형을 사용해야만 한다. 단 double 형의 경우에도 소수점이하 14자리까지만 정확하게 표현할 수 있기 때문에 그 이상의 수를 표현하기 위해서는 long을 붙혀 long double형을 사용해야 한다.

반응형

댓글