C언어

[C 언어] 데이터 타입 2번째

Teodore 2023. 1. 14. 22:33
728x90

지난번 데이터 타입에 관련된 내용은 사실상 형 변환(타입 변경)에 집중된 내용이었다.
그래서 데이터 타입에 관해 좀 더 집중적으로 적어보고자 이 포스팅을 준비했다.
다소 지루하거나 이미 알고 있는 내용일수도 있으나 꽤 중요한 부분이니 복습한다는 의미로 봐주길 바란다.

1. 정수형 데이터 타입의 종류

C언어에서 정의된 데이터 타입은 아래와 같다. (32bit 기준)

type size(byte) min max
char 1 0 127
signed char 1 -127 127
unsigned char 1 0 255
signed short 2 -32767 32767
unsigned short 2 0 65535
signed int 4 -2147483647 2147483647
unsigned int 4 0 4294967295
signed long 4 -2147483647 2147483647
unsigned long 4 0 4294967295

위에서 이상한 점을 눈치챘을 것이다. char는 signed char도 아니고 unsigned char도 아니다.
그 이유는 char는 근본적으로 알파벳을 표현하기 위한 형식이었기 때문에 음수가 필요 없었기 때문이다.
요즘은 컴파일러의 설정에 따라 다르게 값의 범위를 지정할 수 있다.

두 번째 특이점은 int형과 long형의 크기가 같다는 것이다. 이것은 16bit환경에서는 int가 2byte로 해석되어 4byte를 표현하기 위해 long이라는 자료형을 정의했기 때문이다. 요즘은 32bit / 64bit 환경이 많이 사용되므로 자료형의 사이즈가 달라질 수 있다는 것을 유념해야 한다.

2. 실수형 데이터 타입의 종류

type size(byte) 유효자리수
float 4 소수점 6~7자리
double 8 소수점 15~16자리

실수를 표현하기 위해서 똑똑하신 분들은 부동소수점 (float point) 방식을 적용했다. 고정적으로 정수부를 한자리로 고정시키고 나머지를 지수부와 소수부로 나누어 표현하는 방식이다.
즉 31.4는 3.14E+1로 표현하고, 0.1234는 1.234E-1로 표현하는 방식이다.
이것은 숫자를 효율적으로 더 넓은 범위를 표현하기 좋은 방식이고 정확도에 따라 float / double형에 차이가 발생한다.
위의 테이블과 마찬가지로 소수부에 들어갈 수 있는 숫자의 자리가 float의 경우 6~7자리 double은 그 2배의 범위를 가진다.
즉, 과장하자면 우주왕복선에 들어가는 펌웨어 같은 것이 아니라면 float을 사용해도 아무런 차이가 없다는 것이다.

3. boolean

true or false로 표현되는 boolean은 C99에서 추가된 데이터 타입이다.
bool은 매우 간단하면서 우리가 자주 쓰는 타입이지만 아주 안정적인 프로그램을 만들어야 하는 부분, 예를 들면 차량용 펌웨어를 만드는 코드에서는 사용될 수 없다. 습관적으로 bool을 사용하는 사람이라면 한번쯤은 int형태로 0 or 1로 재정의하여 프로그램해보도록 하는 것을 추천한다.

728x90