본문 바로가기

Coding Note

[C++] 데이터 타입


앞서 데이터와 상수,변수에 대해 설명했고,
지금부턴 그 데이터의 형태에 대해 알아보자.

데이터에는 '타입' 이 있다고 했는데,
흔히 알고있는 정수, 실수, 문자들이 그 타입이다.

데이터타입에 따른 변수는 자신의 타입에 맞는 값만을 저장할 수 있다.
따라서 변수를 선언할때는 이 변수가 어디에 사용될 것인지 생각해보고
그에 맞는 타입으로 변수를 만들어줘야한다.

본격적으로.

변수의 선언은
[데이터 타입] [변수명];
이라 하였고, 데이터 타입은 변수에 저장할 수 있는 값을 형태를 결정짓는 중요한 요소라 했다.

데이터 타입에는
기본적인 형태인 정수형, 실수형, 문자형  이 있고, 이러한 기본 데이터 타입 외에
배열, 포인터, 클래스 등이 있다.(이것들은 한참 뒤에 설명)

-정수 데이터 타입-

정수를 저장하며, C++에서 사용되는 정수는 10진수, 8진수 16진수가 있다.

먼저 기본적인 정수형 변수들을 보자.
   int deci = 100;
   int oct = 034;
   int hex = 0xA1;
10진법을 저장할때는 그냥 숫자를 쓰면 되고,
8진법을 저장할때는 8진법 수 앞에 숫자0을 붙인다.
그리고 16진법을 저장할때는 16진법 수 앞에 0x를 붙인다.
이들을 출력할 때
   std::cout<< deci<<std::endl;
   std::cout<< oct <<std::endl;
   std::cout<< hex << std::endl;
처럼 출력하는데, 출력설정을 변경하지 않는 한(나중에 배움) 저장형태가 어떻든 기본 10진법의 형태로 출력된다.

그리고 중요한 한가지!
데이터는 각 타입마다 저장 할 수 있는 내용물의 길이가 다르다.
정수형에도 길이가 다른 세가지의 타입이 있는데, short, int, long 이렇게 있다.
/*------------------------------------------------------------------*/
|데이터 타입           크기                               표현 범위                         |
|   short              2바이트                -32768 ~ 32767                               |
|    int                 4바이트                -2147483648 ~ 2147483647                |
|   long               4바이트                -2147483648 ~ 2147483647                |
/*------------------------------------------------------------------*/
사실 int타입은 운영체제에따라 크기가 다른데, 32비트 운영체제에선 4바이트(32비트), 64비트 운영체제에선 8바이트(64비트)
를 가진다.

아, 그리고 각 정수형 타입 앞에 unsigned  를 붙이게 되면, 부호가 없는 정수를 저장하는 변수를 선언하게된다.
부호가 필요 없으므로 표현범위또한 두배로 는다.(크기는 그대로)
ex)unsigned int num=1000000000; 
     unsigned int num2 = -10000;  // error!

타입마다 표현범위가 있는건, 그 이상의 표현은 할 수 없다는거다.
표현 범위를 넘어서 저장하려 하면 overflow(오버플로)라는 값의 넘침현상이 나타나 원하지 않는 값을 출력하게되니 조심해야한다.(2진수의 계산으로 어떤 원하지 않는 값이 출력될지 예상해보면 재밌다)


-실수 데이터 타입-

C++언어에서 사용되는 실수는 소수점표현과 지수 표현이 있다.
값을 저장하는 방법엔 차이가 나지만, 정수타입과 마찬가지로 출력시 설정해주지 않으면 소수점방식으로 출력된다.

실수의 대표적인 타입은 double이 있고, 8바이트의 크기를 가진다.
그리고 다른 길이의 실수타입으론 float와 long double가 있다.
/*----------------------------------------------------------*/
|데이터 타입                 크기                   표현 범위                   |    
|   float                      4바이트                 ±10^(±38)                 | 
|  double                   8바이트                 ±10^(±308)                |
| long double        시스템에따라 다름        시스템에따라 다름       |
/*----------------------------------------------------------*/
실수형은 조금 복잡한데, 자세한 내용은 컴퓨터개론  같은 책을 살펴보면 나온다.


-문자 데이터 타입-

문자 데이터 타입은 char 또는 unsigned char이 있다.
유의할 점은 문자형 변수를 선언할 때 문자에 작은따옴표로 둘러싸줘야 한다.
그리고 문자는 알파벳 자체를 저장하는게 아니라 ASCII코드의 코드값을 저장하고있기때문에
사실상 작은 정수형 변수라고 해도 될정도다.

ASCII코드가 128개의 문자를 표현하고 있기때문에 char나 unsigned char나 별반 차이가 없다.(크기는 1바이트)
때문에 unsigned char는 거의 안쓰인다.(나도 써본 적 없음..)

문자형은 아스키코드의 코드값을 저장하고있기때문에
char a='A',  b;
b=a+1;
와같이 하면 변수b는 문자'A'보다 하나 큰'B'를 갖게된다.

-문자열-
문자열은 '배열'이라 하는 새로운 데이터타입을 문자 데이터 타입에 적용하는 방법,
포인터라 하는 새로운 개념을 적용하여 문자열을 사용하는 방법,
c++에서 제공하는 string이라는 클래스를 사용하는 방법으로 등으로 나뉜다.

기본적인 개념은 비슷하기때문에 여기선 간단하게 문자배열에 대해서만 설명하고,
배열과 포인터를 더 배운 뒤 다시 설명하겠다.

먼저 문자열은
char str[6] = "Hello";
과 같이 선언&초기화 한다.

배열이란 데이터타입 변수명[N]  과 같이 선언하는데, N개의 데이터타입을 만들겠다는 뜻이다.
그러므로 위 코드는 6개의 문자형변수를 만들겠다는 의미이다.

그리고 str[0], str[1], str[2]...   순서대로 H, e, l,....  이 저장되게 된다.
여기서 Hello는 5글자인데 6개의 문자배열을 만든 이유는, 널문자('\0')라 하는 빈 공간을 지정하기 위해서다.
나중에 std::cout 에서 출력을 할때, 요놈은 문자배열의 처음부터 쭉쭉 출력해주다가 널이라 하는 빈 공간을 만나야 출력을 멈춘다. 따라서 이 공간을 넣어주지 않으면 출력을 멈추지 않고 다른 메모리까지 접근하는 큰 오류가 발생하는데.....

갑자기 단계가 뛰어넘어서 어려웠을테지만, 일단은
char 변수명[N+1] = "글자"; //(N은 글자수)
라고만 알고있도록.


지금 매우 졸리므로 오늘은 여기까지.


'Coding Note' 카테고리의 다른 글

[winAPI] 콘솔창 띄우기  (0) 2011.03.09
[C++] 데이터 타입의 변환  (0) 2011.03.07
[C++] 상수 변수  (0) 2011.03.02
[C++] Hello World-  (0) 2011.03.02
[C++] C++ 시작하기 전.  (0) 2011.03.02