wellcome_공부일기

02.01. C++ | 기본 자료형(Primitive Built-in Types)과 + α 본문

프로그래밍/C++

02.01. C++ | 기본 자료형(Primitive Built-in Types)과 + α

ma_heroine 2020. 5. 2. 22:20

<목차>

1. 자료형(Data Types)

2. 기본 자료형(Primitive Built-in Types)

3. 정수 int & 문자 char 예제

4. 불린 bool 예제

5. 부동 소수점(float)와 더블(double) 그리고 auto

6. typedef Declarations (To be continued..)

7. Enumerated Types (To be continued..)

 

 

자료형(Data Types)

어떤 언어든지 프로그램을 작성할 때, 다양한 변수들을 이용하여 다양한 정보를 저장할 줄 알아야 합니다. 변수들을 값(values)을 저장하기 위해 예액된 메모리 위치일 뿐입니다.  즉, 변수를 생성할 때 메모리 안의 공간에 예약을 한다는 것을 의미합니다.

 

우리는 다양한 데이터 유형(character, wide character, integer, floating point, double floating point, boolean etc.)의 정보를 저장할 수 있습니다. 운영 체제는 변수의 데이터 유형에 따라 메모리를 할당하고 예약된 메모리에 저장할 수 있는 것을 결정합니다. 

 

기본 자료형(Primitive Built-in Types)

C++은 프로그래머에게 사용자 정의 데이터 유형뿐만 아니라 내장된 다양한 조합을 제공합니다.

다음 표는7가지 C++ 기본 데이터 유형(Primitive Built-in Types)입니다. 

www.tutorialspoint.com/

이러한 유형 한정자(type modifiers) 중 하나 이상을 사용하여 여러가지 기본 유형을 수정할 수 있습니다. 

  • signed
  • unsigned
  • short
  • long

아래 표는 변수 유형마다 얼마나 많은 메모리를 메모리 값에 저장할 수 있는지와 변수 타입의 값이 저장될 수 있는 최대 및 최소 값이 얼마인지 보여줍니다. 

www.tutorialspoint.com/

변수의 크기는 사용하는 컴파일러와 컴퓨터에 따라 위의 테이블과 다를 수 있습니다.

변수의 정확한 사이즈를 확인하고 싶다면 아래 코드를 참고하여 각자 컴파일러에서 돌려보면 됩니다!  ʕ·͡ᴥ·ʔノ 

#include <iostream>

int main()
{
    using namespace std;

    bool x = true;
    char a = 'H';

    cout << sizeof(bool) << endl;
    cout << sizeof(a) << endl;

    auto value1 = 3.141592;
    auto value2 = 3.141592f;

    cout << sizeof(value1) << endl; //output 8
    cout << sizeof(value2) << endl; //output 4

    return 0;
}

- sizeof() 라는 연산자를 이용하면 메모리에 얼마큼 공간을 차지하는지 알 수 있습니다.

sizeof()에 데이터 타입이나 변수를 넣어도 작동을 합니다. 

- 자동으로 타입을 결정해주는 auto라는 타입도 존재합니다. 

 

전체적으로 확인하고 싶다면, 아래 코드를 참고하시면 됩니다.

(출처 : www.tutorialspoint.com/cplusplus/cpp_data_types.htm )

#include <iostream>
using namespace std;

int main() {
   cout << "Size of char : " << sizeof(char) << endl;
   cout << "Size of int : " << sizeof(int) << endl;
   cout << "Size of short int : " << sizeof(short int) << endl;
   cout << "Size of long int : " << sizeof(long int) << endl;
   cout << "Size of float : " << sizeof(float) << endl;
   cout << "Size of double : " << sizeof(double) << endl;
   cout << "Size of wchar_t : " << sizeof(wchar_t) << endl;
   
   return 0;
}

- 위에서 나오는 출력물은 바이트(byte) 단위입니다.

- 1 byte = 8 bit 로, 예를 들어 int는 4 byte로 32bit를 사용하고 있습니다. 

 

 

정수 int & 문자 char 예제

컴퓨터 내부적으로 아스키 코드 테이블에 따라 각 문자에 해당하는 숫자( 혹은 숫자에 해당하는 문자)를 출력할 수 있습니다. 

#include <iostream>

int main()
{
    using namespace std;

    int a = 'A';
    char b = 72;

    cout << a << endl; // output : 65
    cout << (char)a << endl; // output : A
    
    cout << b << endl;  // output : H
    cout << (int)b << endl; // output : 72
    return 0;
}

- 정수 하나를 저장하는데 메모리 4바이트가 필요하고 영어 문자 하나를 저장하는데 1바이트가 필요하다. 

- 데이터 타입마다 저장되는 방식이 다르나, 출력 시 형변환을 해주면 원하는 결과물을 얻을 수 있다. 

- 참고로 string은 기본 자료형이 아닌 외부 라이브러리이다. 

- 정수에서 (signed) int는 음의 정수, 0, 양의정수(자연수)를, unsigned int는 양의 정수와 0을 포함합니다.

- 참고로 수학 용어에서 양의 정수(positive integer)나 음의 정수(negetive integer)는 0을 포함하지 않습니다.

- (signed) int와 unsigned int 모두 정수 타입이지만 숫자의 범위가 넓은 게 있고 숫자의 범위가 작은 게 있다는 차이점이 있습니다.

 

 

불린 bool 예제

Boolean이라는 수학자로 부터 탄생한 유형으로 true 혹은 false 값을 취할 수 있습니다.

(x ? 1 : 0)와 같은 삼항 연산자가 궁금하시면 https://heroine-day.tistory.com/17 을 참고해주세요.

#include <iostream>

int main()
{
    using namespace std;
    
    bool x = true;
    bool y = false;

    cout << (x ? 1 : 0) << endl;
    cout << (y ? 1 : 0) << endl;
    
    return 0;
}

 

 

부동 소수점(float)와 더블(double)

실수 표현의 정밀도 측면에서 float를 single precision, double을 double precision라고 합니다.

double은 float의 두배를 사용하기 때문에 두배 즉, double이라고 부릅니다.

부동 소수점(float)와 더블(double)의 차이는 메모리를 얼마나 사용하는지가 다릅니다. 

부동 소수점(float)는 정수형(int)과 똑같은 사이즈인 4바이트로, 32비트(4 x 8 bit)를 사용합니다.

더블(double)은 64비트를 사용합니다. 여기서 long double은 더블보다 더 큰 범위를 사용한다는 뜻입니다. 

#include <iostream>

int main()
{
    using namespace std;

    float fValue = 3.141592f;
    double dValue = 3.141592;
    
    cout << fValue << endl;
    cout << dValue << endl;

    auto value1 = 3.141592;
    auto value2 = 3.141592f;

    cout << value1 << endl;
    cout << value2 << endl;

    return 0;
}

- float 타입은 저장될 값 뒤에 f를 붙인다는 특징이 있습니다. f를 붙이지 않으면 오류가 발생합니다.

- double 타입은 정밀도가 double precision으로 높기 때문에 실수 그대로를 표현해도 됩니다. 

- float는 실수 정밀도 표현에서 single precision을 가지기 때문에 정밀도가 두배 높은 double 값(f를 안 붙인 값)을 넣는다면 오류가 나타납니다.

 

 

- 위에서 설명한 것과 같이 자동으로 데이터 타입을 졀정해주는 auto 타입이 존재합니다.

- CLion에서 auto 선언 후 초기화 값을 넣어주신 후, auto 더블 클릭 후, 오른쪽 커서를 누르고 아래와 같이 분리하기를 누르시면 값(value)에 해당하는 데이터 타입으로 교체됩니다.

 

f가 없어, double로 짐작할 수 있습니다.

 

Split을 누르면 value에 해당하는 데이터 타입으로 바꿔줍니다.

 

 

 

 

 

 

* 위 포스팅은 홍정모님의 따라 배우는 C++을 공부한 토대로 작성하였습니다.

* 자료형의 이론과 설명은 www.tutorialspoint.com 에서 참고하였습니다.

Comments