Priceless

C++ 자료형 정리 본문

Programming/C++

C++ 자료형 정리

Hyun__ 2023. 9. 30. 15:27

1장. 자료형(Data Type)과 리터럴(Literal)

개요

C/C++은 데이터 타입이 엄격한 프로그래밍 언어이다

그러므로 변수를 선언할 때 자료형과 함께 선언해야 하며

그 변수를 채우기 위해 값을 넣을 때 데이터를 입력한다(리터럴)

파이썬과 가장 큰 차이점 중 하나로 대표적인 자료형에 대해 알아본다

 

대표적인 자료형 종류

- char

character의 약자

ascii code 내의 범위에 속하는 문자 하나를 저장하는 자료형

ascii code 범위에 해당하는 정수로 나타내어 출력 가능하다

char x = 'a'; // a
int y = x; // 97

 

- int

integer의 약자

정수의 범주에 속하는 정수를 저장하는 자료형

4byte의 자료형으로

-2의 31 제곱부터 +(2의 31 제곱) - 1의 정수를 나타낸다

대략적인 범위로 -21억부터 +21억의 정수이다

int x = 123412341234;

- long long(int)

훨씬 더 큰 범위의 정수를 저장하는 자료형

8byte의 자료형으로

-2의 63 제곱부터 +(2의 63 제곱) -1의 정수를 나타낸다

매우 넓은 범위로 왠만한 정수는 다 사용할 수 있다

 

선언할 때 int를 생략할 수 있다

혹은 'll'나 'LL'을 붙여 long long 타입을 나타낸다

long long x = 1234123412341234;
long long y = 1234123412341234ll;
long long z = 1234123412341234LL;

int xx = 1234123412341234; // 21억이 넘은 정수이므로 원하지 않는 값이 출력됨 (overflow)

- float

소수점을 저장하는 자료형

비교적 낮은 정밀도 수준을 나타내는 부동소수점 수를 나타낸다

대략 소수점 이하 6자리 까지 나타낼 수 있다

'f'를 붙여 float 타입을 나타낸다

float x = 1.2;
float y = 1.2f;

- double

더 정교한소수점을 저장하는 자료형

비교적 높은 정밀도 수준을 나타내는 부동소수점 수를 나타낸다

대략 소수점 이하 15자리 까지 나타낼 수 있다

컴파일러마다 다를 수 있으므로 유의한다

(xcode의 경우 6자리로 동일)

double x = 0.123456789; // 0.123457

- bool

참, 거짓을 저장하는 자료형

true와 false를 나타낸다

1byte의 자료형으로

0(false)과 0이 아닌 수(true)로도 나타낼 수 있다

bool x = true; // 1
int y = x; // 1

bool x = false; // 0
int y = x; // 0

bool x = -100.1; // 1
int y = x; // 1

 

- unsigned (int, long, long long 등)

부호를  저장하지 않는 자료형

부호 비트가 없으므로 음이 아닌 정수를 저장한다

기존 음수 범위만큼 양수 범위를 추가로 나타낼 수 있다

'u'나 'U'를 붙여 unsigned 타입을 나타낸다

unsigned int x = 1;
unsigned int y = 1u;

 

리터럴(Literal)

정의

Literal의 사전적 의미는 '문자 그대로의', '문자 상의' 등이다

말 그대로 데이터 그 자체라는 뜻으로 

변하지 않는 데이터를 의미한다

 

아래 코드에서 '123412341234'와 '1234123412341234LL' 가 리터럴에 해당한다

int x = 123412341234;
long long z = 1234123412341234LL;

 

auto

리터럴에 명시된 데이터 타입으로 초기화되는 자료형이다

초기화가 되기 위해서는 반드시 초기값이 있어야한다

auto x = 123; //x는 int 타입
const auto cx = x; //cx는 const int 타입
const auto& rx = x; //rx는 const int& 타입
auto&& fref1 = x; //fref1은 int& 타입
auto&& fref2 = cx; //fref2은 const int& 타입
auto&& fref3 = 27; //fref3은 int&& 타입
const char str[] = “abcd”; //str은 const char[5] 타입
auto arr1 = str; //arr1은 const char* 타입
auto& arr2 = str; //arr2은 const char(&)[5] 타입
auto y = {21}; //y는 initializer_list 타입
auto z {35}; //z는 컴파일러에 따라 initializer_list or int 타입