자료형은 데이터를 표현하는 방법이다
정수형 자료형
char (1바이트) short(2바이트) int (4바이트) long (4바이트) long long( 8바이트)
실수형 자료형
float (4바이트) double(8바이트) long double (8바이트 이상)
많은 수의 자료형을 제공하는 이유
1. 데이터의 표현방식이 다르므로, 최소 둘 이상의 자료형이 필요하다.
2. 메모리 공간의 적절한 사용을 위해서 다양한 크기의 자료형이 필요하다.
연산자 sizeof 를 사용하면 자료형의 크기를 확인할 수 있다.
ex)
int num;
int sz1 = sizeof(num); // 변수 num의 크기를 계산하여 sz1 초기화
int sz2 = sizeof(int); // 자료형 int의 크기를 계산하여 sz2 초기화
정수를 표현 및 처리하기 위한 일반적인 자료형의 선택
일반적으로 CPU가 처리하기에 가장 적합한 크기의 정수 자료형을 int로 정의한다. 따라서 int형 연산의 속도가 다른 자료형의 연산속도에 비해서 동일하거나 빠르다. 따라서, short형이나 char 형 자료형을 연산할때 ( int 형보다 작은 크기의 자료형) 에는 int 형 자료형으로 형변환하여 연산이 진행된다. 따라서, 연산을 위한 변수라면 int 형 변수로 선언하는것이 가장 좋다. 데이터의 양이 많아서 연산속도보다 데이터의 크기를 줄이는 것이 더 중요한 데이터들 ex) 음성데이터나 영상데이터 의 경우에는 char형, short 형으로 선언하는것이 좋다.
실수를 표현 및 처리하기 위한 일반적인 자료형의 선택
실수자료형의 선택에 있어서 가장 중요한 요소는 정밀도이다. ( 사용되는 바이트의 수가 커지면 오차는 줄어듦)
보통 double을 보편적으로 선언한다. ( 과거에는 float 형이었지만, 하드웨어의 발달로 가용 메모리가 커졌기때문 )
unsigned 를 붙여서 0과 양의 정수로만 표현하게 할 수 있다
정수 자료형에 한해서 unsigned 선언을 추가하면 MSB도 데이터의 크기를 표현하는데 사용되기 때문에 표현할 수 있는 값의 범위가 양의 정수 방향으로 두배 더 넓어지게 된다.
문자 표현을 위한 약속 - 아스키코드
C언어는 아스키코드라는 표준을 선택해서 문자를 표현하며 , 아스키코드는 알파벳과 일부 특수문자를 포함하여 총 128개의 문자로 이루어져있다.
ex)
int main (void)
{
char ch1 = 'a'; // 문자는 작은 따옴표로 감싸서 표현한다
char ch2 = 'A'; // 문자는 컴파일러에 의해서 char ch2 = 65; 와 같이 변환된다
printf("%c : %d \n",ch1.ch1);
}
서식문자 %c는 문자의 형태로 데이터를 출력(또는 입력) 하라는 뜻이고, 서식문자 %d는 정수의 형태로 데이터를 출력(또는 입력)하라는 뜻이다.
* 정수는 출력의 방법에 따라서 문자의 형태로도 , 숫자의 형태로도 출력이 가능하다.
상수
상수는 이름이 있는 상수와 없는 상수로 나뉘며, 상수 역시 int , double과 같은 자료형을 근거로 표현된다. 상수는 변경이 불가능한 데이터를 뜻한다.
이름을 지니지 않는 리터럴( Literal ) 상수
ex)
int num = 30+40; // 30과 40은 상수이다
이때, 정수 30과 40은 메모리공간에 int자료형 상수의 형태로 저장된 후 연산값을 num에저장하고 메모리공간에서 사라진다. 메모리 공간에 저장되었을 때, 할당된 공간에 이름이 없기때문에 리텉럴 상수라고 부른다
접미사를 이용한 다양한 상수의 표현
float num1 = 4.1; // 4.1은 자동적으로 double 형 자료형으로 메모리에 할당되기때문에 num1에 저장할때 데이터가 잘려나갈수 있다.
float num1 = 4.1f; // 이때, 이렇게 float형의 접미사f를 붙여주면 된다.
이름을 지니는 심볼릭(Symbolic) 상수 : const 상수
심볼릭상수를 표현하는 방법에는 const 키워드를 이용하는 방법과 매크로를 이용하는 방법이 있다.
const int MAX = 100; // MAX는 상수이기때문에 값의 변경이 불가능하다.
*상수의 이름은 모두 대문자로 표시하고 둘 이상의 단어로 연결할때는 언더바를 사용해서 두 단어를 구분하는 것이 관례이다.
자료형의 변환
대입연산의 전달과정에서 발생하는 자동 형 변환
double num1 = 245; // int형 정수 245 를 double형으로 자동 형변환
정수의 승격(Integreal Promotion)에 의한 자동 형 변환
short num1=1 , short num2= 2;
short num3 = num1+num2; // num1과 num2가 int형으로 자동 형변환
CPU가 처리하기에 가장 적합한 크기의 정수형을 int로 정의했기 때문에 ,연산속도가 int형 자료형이 가장 빨라서 short 형 데이터는 연산시 자동으로 int형 자료형으로 형변환된다.
피연산자의 자료형 불일치로 발생하는 자동 형 변환
double num1 = 19.4+4; // 실수형 데이터와 정수형 데이터의 합연산을 요구하고있는데 이때 연산이 불가능하여 둘중 하나를 형 변환해야한다. 실수형 데이터를 정수형 데이터로 변환하면 데이터의 손실이 커지므로 정수형 데이터가 실수형 데이터로 자동 형변환된다.
* int - long - long long - float - double - long double 순으로 데이터 손실을 최소화할 수 있다. ( 형변환의 우선순위는 정수 자료형보다 무조건 실수자료형이 앞서는 형태이다 )
명시적 형변환 : 강제적 형변환
int num1 = 3, int num2 = 4;
divResult = (double)num1/num2;
C언어에서 소괄호는 형변환에도 사용이된다. 위에서 사용된 소괄호를 가리켜 형변환연산자라고 한다.
'C언어 > 열혈C' 카테고리의 다른 글
C : Chapter -7 조건문 (0) | 2018.03.19 |
---|---|
C : Chapter -6 반복문 (0) | 2018.03.19 |
C : Chapter -4 데이터 표현방식의 이해 (0) | 2018.03.17 |
C : Chpater -3 변수와 연산자 (0) | 2018.03.17 |
C : Chapter -2 프로그램의 기본구성 (0) | 2018.03.17 |