다음은 추가 라이브러리 필요없이 바로 쓸 수 있는 자료형이다. 각 자료형의 크기는 64bit ubuntu 20.04 LTS 버전의 g++ 9.3.0버전 기준으로 작성되었다. 자료형마다 할당되는 크기는 OS, CPU, 컴파일러 등에 따라 차이가 있을 수 있다.
유형 구분 | 자료형 | 크기 | 범위 | 비고 |
---|---|---|---|---|
유형 없음 | void | - | - | - |
정수형 | bool | 1 byte | 1 or 0 | true or false |
char(int8_t) | 1 byte | $-2^7 \sim 2^7-1$ ($-128 \sim 127$) | - | |
unsigned char(uint8_t) | 1 byte | $0 \sim 2^8-1$ ($0 \sim 255$) | - | |
short(int16_t) | 2 byte | $-2^{15} \sim 2^{15}-1$ ($-32,768 \sim 32,767$) | - | |
unsigned short(uint16_t) | 2 byte | $0 \sim 2^{16}-1$ ($0 \sim 65,535$) | - | |
int(int32_t) | 4 byte | $-2^{31} \sim 2^{31}-1$ ($-2,147,483,648 \sim 2,147,483,647$) | - | |
unsigned int(uint32_t) | 4 byte | $0 \sim 2^{32}-1$ ($0 \sim 4,294,967,295$) | - | |
long(int64_t) | 8 byte | $-2^{63} \sim 2^{63} -1$ ($-9,223,372,036,854,775,808 \sim 9,223,372,036,854,775,807$) | - | |
unsigned long(uint64_t) | 8 byte | $ 0 \sim 2^{64}-1$ ($0 \sim 18,446,744,073,709,551,615$) | - | |
실수형 | float | 4 byte | $-3.402\ 823\ 4 \times 10^{-38} \sim 3.402\ 823\ 4 \times 10^{38}$ | 최대 정확도: 소수점 아래 7자리 |
double | 8 byte | $-1.797\ 693\ 134\ 862\ 315\ 7 \times 10^{308} \sim 1.797\ 693\ 134\ 862\ 315\ 7 \times 10^{308}$ | 최대 정확도: 소수점 아래 15자리 | |
long double | 16 bytes | $\pm1.189\ 731\ 495\ 357\ 231\ 765\ 085\ 759\ 326\ 628\ 007\ 016\ 2 \times 10^{4932}$ | 최대 정확도: 소수점 아래 37자리 |
long의 경우 long int, long long, long long int 로도 쓸 수 있다.
이 중 주로 사용하는 자료형은 char(문자, 문자열), int(정수), float(실수), double(실수) 이다.
자료형이 가진 범위를 넘어선 숫자를 계산할 경우 stack overflow가 일어나서 원치 않은 결과를 얻을 수 있다. 또 자신이 다룰 숫자에 비해 너무 큰 크기를 가진 자료형을 사용하게 되면 메모리 낭비가 될 수 있다. 따라서 자신이 다룰 숫자의 크기가 어느정도 될 지 가늠해 보고 적절한 자료형을 사용하는게 중요하다.
다시 한 번 강조하지만 위의 자료형 크기는 참조용이며, 자신의 PC 환경에 따라 조금씩은 다를 수 있다. 특히 long과 long double의 경우 PC에 따라 각각 4 byte, 8 byte를 할당하는 경우도 있으니 다음과 같이 확인해 보고 사용하는 것을 권장한다.
<Code:C++> #include <iostream>
using std::cout;
int main() {
cout << "long: " << sizeof(long) << "\n"; cout << "long double: " << sizeof(long double) << "\n"; return 0;
} </Code>