본문 목표
C언어를 사용하면 변수들을 잘 다뤄야 한다.
(어느 언어를 이용하던 마찬가지)
그러려면 자료형을 잘 알고 있어야한다.
처음 C언어를 다루는 단계라면 얕게 배우고 넘어가도 되지만,
이제 코드 실행 시간을 단축시키고, 메모리를 효율적으로 관리하려면 메모리 크기까지 다뤄야 한다.
그리고 수학적으로 이용하는 경우에는 각 자료형의 데이터 범위도 알아야 한다.
오늘은 C언어의 가장 기초가 되는 자료형을 익혀보도록 한다.
개념 정리
C언어의 기본 자료형으로는 정수형과 실수형이 있다.
일단 컴퓨터는 0과 1 로 작동한다.
즉, 2진수로 작동한다.
0 과 1, 두개를 사용할 때, 그 한자리 단위를 우리는 bit 라고 한다.
만약 8 bit 라고 한다면 위와 같이 되는 것이다.
우리가 1000m 를 1km 라고 하듯이
8bit는 1byte 라고 한다.
초등학교때 이진수를 배우니깐,
1111 1111 (2) 는 = 255 이라는 것도 알 수 있다.
그러니깐 1byte 의 최대 크기는 255 인 것이다.
그래서 대부분의 코드들이 숫자를 0~255 까지 받는 이유는 8bit 자료형을 사용하기 때문인 것이다.
이 개념을 가지고 이제 다음 자료형들을 이해해보자.
표로 정리해보았다.
char 를 보면 1byte 크기이므로 표현은 255 까지 할 수 있다.
그런데 음수까지 표현하니깐 범위로 표현하자면 -128 부터 127 까지 할 수 있는 것이다.
정수형에는 정수를 저장하고,
실수형에는 실수를 저장한다.
중요하게 짚고 넘어간다면 기초 단계에서는
char, int, float, double 만 알면 어느정도 다 해결할 수 있다.
char 는 문자만 저장하는데 사용하는 것이라고 아는 사람들이 많지만,
정확히 말하자면 틀렸다.
char 도 int 처럼 숫자를 저장하는 정수 자료형이다.
위와 같이 코드를 작성하고 작동시키면 제대로 실행될까?
"char 형에는 %c 를 써야 되는거 아닌가요? " 라고 할 수 있다.
결과를 보자면 -128 로 제대로 출력이 된다.
왜냐하면 정수를 저장했기 때문이다.
문자로 저장하려면 char a = 'A' 같이 저장했어야 하고,
문자열로 저장하려면 char a[ ] = "-128" 같이 저장했어야 한다.
다시 본론으로 돌아오면
적은 숫자는 char 로도 다 커버칠 수 있다.
그런데 좀 더 큰 정수는 char로는 턱없이 부족하다.
그래서 사용하는게 int 자료형이다.
정수를 사용하는 것이 아니라 실수를 사용하면
float 자료형을 사용한다.
그런데 float 이 그 크기가 작을 때가 많다.
그럴 때 사용하는 것이 크기를 2배나 키운 double 이다.
다시 의문이 있다면
int 형으로 문자 표현은 안되는데, 왜 char는 되냐고 할 수 있다.
우리가 사용하는 문자들은 각자 숫자로 다 정의가 되어있다.
그걸 아스키코드라고 한다.
char는 -128 ~ 127 까지 저장할 수 있다고 했었다.
그 범위 값들에 문자를 대응시켜 논 것이다.
우리가 사용하는 문자는 한글이지만,,,
코딩은 다 영어로 하니깐 알파벳이 숫자에 다 정의되어있다.
그러니깐 만약
위와 같이 코딩하면
a 에는 65라는 '숫자' 가 저장되고,
printf( ) 라는 함수 안에서 %c (문자)로 출력하라고 명령을 했으므로,
아스키 코드표에서 숫자 65가 가리키는 A 가 출력이 되어야 하는 것이다.
그러면 다시 생각하면
char a = 'A' ;
라고 코딩 하면 변수 a 에는 무슨 숫자가 저장되는 것일까?
답은 당연 65라는 '숫자'가 저장되는 것이다.
그러면 int 자료형을 써도 되는거 아니냐고 물을 수 있다.
당연히 된다. int 자료형을 써도 똑같이 나온다.
그런데 왜 char 만을 쓰냐고?
앞에서 다뤘지만 char는 데이터 크기가 1byte 인데,
int 는 데이터 크기가 4byte 이다.
쓸데없이 메모리 크기를 많이 잡아 먹으므로, 문자는 char 를 사용하는 것이다.
문자열을 생각해보자
문자열을 다룰 때에는
char a[ ]
위처럼 배열을 만들어줘야 한다.
이해하기 쉽게 메모리 구조를 살펴보자.
문자를 3개 저장하려면 배열의 크기를 3+1 로 총 4개로 해야한다.
왜냐하면 마지막에 Null 값이 무조건 들어가야 하기 때문이다.
만약 내가 Hello 를 저장하려면 배열 크기는 문자 갯수(5) + 1 인 6으로 설정해야 한다는 것이다.
char 자료형에 문장을 저장하면 위와 같이 각 자리가 1byte 씩 배열로 문자가 저장되는 것이다.
귀찮다면 그냥 크기를 지정하지 않아도 작동하기는 한다...
아무튼 이런 원리로 자료형들이 작동하는 것이다.
이제 앞서 다뤘던 자료형들 앞에 unsigned 라는 단어가 붙으면 어떻게 되나 살펴보자.
위와 같이 된다.
임베디드 시스템이나 아두이노를 다뤄본 사람이라면 왜 값을 0~255 까지 사용하는지 이해가 될 것이다.
unsigned char 를 사용하기 때문이다.
음수를 굳이 사용할 일이 없다면 unsigned 자료형을 사용하는 것이 더 편리한 것이다.
코드 해석 중 unsigned 가 붙은 자료형이 나온다면 무서워하지말고,
아 그냥 음수가 필요없는 경우이고, 양수에서 범위를 더 넓혔구나 ~ 하면서 넘기면 된다.
결론
자료형에 대해서 컴퓨터 메모리 원리를 이해하며 접근해보았다.
char 는 정수를 저장하는 변수이면서, 문자와 문자열을 저장할 수 있다.
자료형이 갖고있는 메모리 크기를 알아봤고, 그에 따른 데이터 범위가 정해진다는 것을 알 수 있었다.
또한 unsigned 를 자료형 앞에 붙임으로써 양수 데이터만 다루면서 음수 범위를 양수쪽으로 더 사용할 수 있다.
도움이 되었거나, 문제가 있는 경우 댓글로 알려주세요~!
감사의 댓글은 작성자에게 큰 힘이 됩니다 ^^
'코딩 > C 언어' 카테고리의 다른 글
C언어 기초 - 조건문 if 이해하기 (0) | 2020.07.05 |
---|---|
C언어 기초 - 지역변수와 전역변수 이해하기 (0) | 2020.07.05 |
C언어 기초 - printf 로 숫자 출력하기 (0) | 2020.07.05 |
C언어 기초 - printf 로 문장 출력하기 (0) | 2020.07.05 |
C언어 기초 - C언어란? (0) | 2020.07.05 |
댓글