C언어 자료형 종류 - ceon-eo jalyohyeong jonglyu

C언어 자료형 종류 - ceon-eo jalyohyeong jonglyu

C언어에서는 변수선언을 위해 기본적으로 제공되는 자료형(Data Type)이 있습니다. 이러한 자료형은 기본 자료형이라고 하는데 이번에는 기본 자료형에 대해서 알아보겠습니다.  

정수 자료형
C언어 자료형 종류 - ceon-eo jalyohyeong jonglyu
표1

자료형에는 크게 정수 자료형 실수 자료형이 있습니다. 먼저 정수 자료형에서 양수 음수를 모두 저장할 수 있는 char, short, int, long, long long의 자료형(Data Type)이 있고 unsigned을 자료형 앞에 붙여 양수의 데이터 만을 처리해 2배의 양수 데이터를 처리할 수 있는 자료형으로 사용할 수 있습니다. 

unsigned는 "무 부호" 또는 "부호가 없는" 이라는 뜻을 가지고 있습니다. unsigned가 없다면 자동적으로 signed가 선언되어지기 때문에 "signed는 생략되어있다"라고 생각하시면 될 것 같습니다. 

부호 : 수학에 나타내는 양수와 음수 '+'와 '-'

C언어 자료형 종류 - ceon-eo jalyohyeong jonglyu
그림 1

표 1-1에서 보면 자료형에 따라서 할당되어지는 메모리의 크기가 다르고 메모리의 크기인 바이트(byte)가 높을 수 록 표현할 수 있는 데이터의 범위 또한 커지는 것을 확인 할 수 있습니다. 

자료형의 int(4byte)와 long(4byte)의 크기가 같은 이유 
자료형 int는 운영체제에 따라서 2byte와 4byte로 사용할 수 있는 메모리 크기가 달라지게 됩니다. 
16bit의 운영체제에서 int의 크기는 2byte, long의 크기는 4byte 였으나 32bit와 64bit 운영체제에서는 int의 메모리 크기가 4byte로 할당되어 long과 메모리 크기가 같게 되었습니다. 

*윈도우가 아닌 다른 운영체제에서는 long의 메모리 크기가 8byte인 경우도 있습니다.

적절한 자료형의 선택! 
C언어 자료형 종류 - ceon-eo jalyohyeong jonglyu
그림 2

자료형을 알기 전 먼저 자료형이 왜 이렇게 다양한가에 대해서 살펴보겠습니다. 그림2와 같이 컵과 500ml의 물이 있습니다. 집에는 1L의 컵과 2L의 컵이 있는데 저는 500ml의 물만 마시고 싶습니다. 2L의 컵을 가지고 500ml를 마시게되면 비어있는 공간이 1L컵으로 마실때 보다 사용하지 않는 공간이 1L가 더 남게되는 것입니다. 반대로 1L의 컵에 1.5L의 물을 따르게 되면 1L를 초과한 500ml에 대해서는 물을 손실하게 되는데 컴퓨터도 정해진 표현범위를 넘어가면 데이터의 손실이 발생하게 됩니다. 

※소주잔에 소주를 따라 마실때와 소주잔에 물을 따라 마실때 어떤게 더 효율적인가요?? 

정수 자료형 char 

1Byte의 정수 자료형인 char는 문자를 뜯하는 character로 자료형 중에서는 가장 낮은 범위의 데이터 표현인 -128~127범위의 값을 저장할 수 있지만 주로 문자를 저장하는 용도로 사용되어집니다. 프로그래밍을 하고 컴파일을 하게 될때 컴파일러에서는 모든 문자를 0~127사이의 정수(아스키 코드 값)로 바꾸어 컴파일 하게 됩니다. 0~127까지의 데이터를 처리하는데 char의 범위내에서 모두 가능하기 때문에 문자를 처리할때 가장 효과적으로 처리할 수 있습니다. 

정수 자료형 short, int, long 

먼저 정수 자료형에 기본이 되는 int는 integer(정수)의 약어로 C언어 뿐만 아니라 C++, Java 등등 다양한 언어에서도 보편적으로 사용되어지는 자료형 입니다. 물론 크기가 낮은 short도 사용될 수 있지만 연산을 할경우에는 int로 변환되기 때문에 변환과정이 생겨 실행 속도가 느려질 수 있습니다. 따라서 특별한 경우가 없다면 int 변수를 선언해 사용하는 것이 보편적입니다. int로 표현할 수 없는 값을 저장할때에는 int보다 큰 long long을 사용할 수 있지만 메모리의 낭비가 많아 효율성이 떨어지게 됩니다. 

short 자료형을 사용할때 int로 변환 되는 것은 연산을 할때 효율적으로 연산하기 위해 연산을 하기 적절한 자료형으로 변환을 거친 다음 연산 하는 것을 "정수의 승격(integral promotion)"이라고 합니다. 
실수 자료형
C언어 자료형 종류 - ceon-eo jalyohyeong jonglyu
표2

실수 자료형은 다양한 자료형이 있는 정수 자료형과 다르게 float, double, long double 3가지로 외울것도 많이 없습니다. 단. 표현 가능한 데이터 범위는 예외... 학교다닐때 외우라고 하시는 선생님과 교수님이 종종 계십니다.

 실수 자료형 double

정수 자료형에서 보편적으로 사용되는 자료형은 int라고 위에서 언급했었습니다. 그럼 실수 자료형에서는 어떤게 보편적으로 사용될까요? 바로 double입니다. 소수 이하 6자리를 표현할때에는 메모리 크기가 낮은 float를 사용하기도 하지만 double보다 정밀도가 떨어져 float보다 정밀도가 높은 double을 보편적으로 사용하는 것입니다. 정밀도가 더 높은것을 원한다면 long double을 사용할 수 있지만 시스템에 따라서 long double을 사용할때 12바이트를 요구하는 경우도 있어 메모리를 너무 많이 차지하기 때문에 8바이트의 double을 더 많이 사용하는 것입니다. 

C언어 자료형 종류 - ceon-eo jalyohyeong jonglyu

간단하게 1.234567890123456789;으로 초기값을 설정해서 "%.15f"를 사용해 출력을 할경우에 float의 값을 보면 1.2345678 까지 7자리까지는 정상적으로 표현되어지나 나머지는 이상한 숫자로 변경되어 진 것을 확인 할 수 있습니다.  double의 경우에는 float보다 더 많은 숫자인 14자리까지는 정상적으로 표현되어지는 것을 확인 할 수 있습니다. 

#include <stdio.h>

// float, double

int main(void)
{
	float ft = 1.234567890123456789;   
	double dt = 1.1234567890123456789; 

	printf("float의 값 =  %.15f\n",ft);
	printf("double의 값 = %.15lf\n ", dt);

	return 0;
}

소수점 15자리 이상 보고 싶은 경우에는 %.20f 또는 %.20lf 처럼 서식 문자앞에 ".개수"를 입력해주면됩니다.