C프로그래밍 4/? 자료형
자료형
데이터를 표현하는 기준입니다. 때문에 변수, 상수도 자료형에 근거합니다.
자료형 |
크기(Byte) |
표현범위 | 소수점 이하 정밀도 |
|
정수형 |
char |
1 |
-128이상 +128이하 | - |
short |
2 |
-32,768이상 +32,768 |
||
int |
4 |
-2,147,483,648이상 +2,147,483,648이하 |
||
long |
4 |
-2,147,483,648이상 +2,147,483,648이하 |
||
long long |
8 |
-9,223,372,036,854,775,808이상 +9,223,372,036,854,775,808이하 |
||
실수형 |
float |
4 |
| 6자리 |
double |
8 |
| 15자리 |
|
long double |
8~ |
double 이상의 표현범위 | 18자리 |
하지만 자료형 별 크기를 정확히 제한하고 있지 않습니다. 따라서 자료형 별 크기는 컴파일러마다 차이를 보입니다. 그러면 이렇게 많은 수의 자료형을 제공하는 이유는 다음과 같습니다.
- 데이터의 표현방식이 다르므로, 최소 둘(정수, 실수 1개씩) 이상의 자료형이 필요합니다.
- 메모리 공간의 적절한 사용을 위해서 다양한 크기의 자료형이 필요합니다.
사용법은 이러합니다. sizeof로 char, short형의 크기를 출력해보면 4바이트로 나올 수도 있습니다. 이는 일반적으로 CPU가 처리하기에 가장 적합한 크기의 정수 자료형을 int로 정의하기 때문입니다. 따라서 int형 연산의 속도가 다른 자료형의 연산속도에 비해 동일하거나 더 빠릅니다.
대신 데이터의 양이 많아서 연산속도보다 데이터의 크기를 줄이는 것이 더 중요한 데이터들의 경우 char, short형 변수가 유용하게 사용됩니다.
unsigned
- 정수 자료형의 이름 앞에만 unsigned를 붙일 수 있습니다.
- unsigned가 붙으면, MSB도 데이터의 크기를 표현하는데 사용이 돼 표현할 수 있는 값이 0 이상의 범위로 두 배가 됩니다.
---------------------
문자의 표현 방식과 문자를 위한 자료형
아스키(ASCII) 코드
수자를 이용해서 문자를 표현하도록 하려면 숫자를 문자에 연결시키는 것이 유일한 방법입니다. 즉, 미리 약속해두는 것입니다. 알파벳과 일부 특수문자를 포함해 총 128개의 문자로 이루어져 있습니다.
코드를 입력하면서 일일이 값을 찾아보기보단 작은 따옴표를 사용해 문자를 표현합니다.
int main(void)
{
char ch1 = 'A';
char ch2 = 'C';
}
문자를 사용할 때는 char형 변수를 사용합니다. 그 이유는 아스키 코드 값은 0이상 127이하로 메모리의 효율적 사용을 위해서기도 하지만 char가 문자의 표현을 위해서 정의된 자료형이기 때문입니다.
-----------------
상수
이름이 의미하듯이 변경이 불가능한 데이터를 뜻합니다. 그리고 상수의 경우 접미사를 이용해 상수를 표현할 수 있습니다.
자료형 | 접미사 |
자료형 |
예 |
정수형 | U |
unsigned int |
unsugned int n = 1025U |
L |
long |
long n = 2467L |
|
UL |
unsigned long |
unsigned long n = 3456UL |
|
LL |
long long |
long long n = 5678LL |
|
ULL |
unsigned long long |
unsgned long long n = 8979ULL |
|
실수형 | F | float | float f = 3.15F |
L | long double | long double f = 5.789L |
참고로, 위의 접미사들은 대소문자를 구분하지 않으므로 눈에 잘 띄도록 상황에 맞게 대소문자를 선택하면 됩니다.
지금까지의 상수와 달리 값을 변경할 수 없는 상수도 존재합니다. 이를 심볼릭 상수 : const 상수라 합니다. 변수 선언 시 const 선언만 추가하면 됩니다. 단, 이는 상수이므로 선언과 동시에 초기화를 해야합니다.
-----------------
자료형 변환
자료형의 변환이라는 것은 데이터의 표현방식을 바꾸는 것입니다. 이는 두 종류로 나눌 수 있습니다.
- 자동 형 변환(묵시적 형 변환)
- 강제 형 변환(명시적 형 변환)