본문 바로가기
Basic/C/C++

[C언어] 제 4 강 : 자료형

by boxbop 2012. 1. 5.
반응형
 이번 강의에서 공부해볼 내용은 자료형과 변수에 대한 내용을 좀 더 심도 있게 다뤄볼 생각입니다^-^

1. 정수형

 정수를 표현하는 자료형은 여러가지가 있습니다. 일단 간단하게 정리해보도록 하겠습니다.

 char       : 1 byte           long        : 4 byte
 short      : 2 byte           long long : 8 byte
 int          : 4 byte
 
 이렇게 표현이 됩니다. 예를 들어 자료형 int 는 정수를 4바이트로 표현한다! 라는 이야기 입니다. 크기가 클 수록 표현 할 수 있는 수의 범위가 많아지겠죠?

 언더플로우와 오버플로우를 설명하겠습니다. 둘다 비슷한 개념이지만 단어의 뜻 대로 언더는 밑으로 오버는 위로 표현범위가 넘처나는 것을 뜻하는데요 이번 에도 int 형을 예로 들면 만약 int 형이 표현할수 있는 범위가 -10에서 +9까지라고 생각해봅시다. 사실 int 형은 -2147483646 부터 2147483647 이지만 쉽게 설명하기 위해서 범위를 축소하여 예를 들었습니다.
 만약 int 형을 사용하여 -11이라는 정수를 표현한다고 생각해봅시다. 그러나 int 형은 값을 표현할 수 있는 범위가 -10에서 +9이기 때문에 -11을 표현할 수 없습니다. 다만 표현은 해야 되기 때문에 -11과는 전혀다른 +9의 값으로 표현 해줍니다. 전혀 쓸모 없는 값이 출력이 되는 것이죠.
 따라서 어떠한 수를 표현할때에는 자료형의 범위를 고려하여 프로그램을 설계해야 합니다. 그렇다고 1200을 표현하기 위해서 long long형을 사용한다면 short형을 사용하여 충분함에도 불구하고 메모리 공간이 낭비되므로 적절한 자료형을 사용해야 합니다. 너무 작은 자료형을 사용하면 오버/언더 플로우가 발생하겠죠~?

 unsigned은 무엇인가?
간단하게 말해서 각각의 자료형 앞에 접두어로 unsigned을 붙여주면 자료형은 모두 양의 정수만 표현하게 됩니다. 만약 int형이 -10 부터 +9까지 나타낼 수 있다면 unsinged int 형은 0 부터 +20까지 표현할 수 있다는 소리 입니다. 즉 나타내는 수의 갯수는 같지만 양의 정수로 표현이 되기때문에  음의 정수를 표현하던 크기만큼 더~~~~ 양수를 표현할 수 있다는 이야기 입니다. 참고로 signed은 음수와 양수 모두 표현할 수 있다는 말이고 int 와 signed int 와는 같습니다. 즉, 모든 자료형 앞에는 signed이 생략되어이 있다고 생각할 수 있습니다.

2. 실수형

 
실수 자료형은 정수 자료형에 비해 표현할 수 있는 수가 상대적으로 적습니다. 이유는 소숫점을 나타내기 위함이죠^^ 일단 보시죠

 float            : 4 byte ( 소수점 6자리 )
 double        : 8 byte ( 소수점 10자리 )
 long double : 12 byte ( 소수점 10자리 이상 )

 괄호안에 보이는 소수점 6자리라는 소리는 float라는 실수 자료형은 소수점 6자리 까지는 오차가 발생하지 않는다는 소리입니다. 즉 정밀도를 이야기하며 float -> double -> long double 순으로 정밀도가 좋습니다.

 
3. 상 수

 이번에는 상수에 대해서 알아봅시다. 시스템을 좀 더 안정적으로 만들어 주기 위해 필요한 개념?이라고 생각해두시면 편하겠습니다.
프로그램 소스코드를 작성하다보면 일반적인 숫자 1,2,3 등과 같은 숫자들을 따로 정의한 부분이 없음에도 불구하고 숫자 자체를 시스템은 그대로 인식을 합니다. 즉 1은 1이다! 라는 소리이죠. 프로그래머가 임의로 1을 2라고 정의하지 못합니다. 실제로 변수에 저장된 값이 변경되지 않도록 상수화 시키는 키워드가 C언어에서는 존재합니다. 그 이름하여 const

 const int SEVEN = 7;
 const int TWO = 2;

 이러한 소스를 작성했다고 가정 합시다. 그럼 int 형 변수 SEVEN에 숫자 7을 선언을 했죠? 그리고 제일 앞에 보시면 const라는 키워드가 존재 합니다. 그럼 SEVEN이라는 변수명은 무조건 7을 나타냅니다. 상수화 시켜버리는 거죠. 때문에 값의 변경이 불가능합니다. 
 
 const int SEVEN = 7;
 SEVEN = 8;

 이러한 소스코드는 컴파일 에러를 발생합니다. 분명 첫 번째 줄에서 SEVEN을 상수화 시켜놓고 두 번재 줄에서는 이 값을 바꾸려고 시도하기 때문입니다. 이해가 좀 가셨나요~?

 이번 강의는 여기서 마치도록 하겠습니다. 뭔가눈에 확 들어오지 않는 강의이지만.... 개인적인 복습의 개념으로 하다보니....ㅎㅎㅎㅎㅎ;; 무튼 이상입니다!

 
반응형