운영체제별 C++ 자료형의 크기와 범위
C++의 변수 앞에는 자료형(데이터 타입)을 지정할 수 있습니다.
자료형 타입은 다양한 크기와 다양한 표현(정수, 실수, 문자)이 존재하며, 사용하고자 하는 목적에 맞게 지정할 수 있습니다.
C++의 운영체제(16, 32, 64비트)별 자료형들의 크기가 어떻게 되는지 한 번 알아보겠습니다.
플랫폼별 자료형 크기
Windows와 Unix, Linux에서 C++ 자료형의 크기는 일반적으로는 서로 차이가 없습니다. 하지만, 이는 컴파일러마다 다를 수 있으며, 특정 시스템에서는 다른 크기를 가질 수 있습니다.
자료형 | 16비트 시스템 | 32비트 시스템 | 64비트 시스템 | |
---|---|---|---|---|
논리1 | bool | 1 byte | 1 byte | 1 byte |
문자 | char | 1 byte | 1 byte | 1 byte |
정수형 | short | 2 byte | 2 byte | 2 byte |
int | 2 byte | 4 byte | 4 byte | |
long | 4 byte | 4 byte | 4 byte (윈도우) 8 byte (유닉스/리눅스) | |
long long | 8 byte | 8 byte | 8 byte | |
실수형 | float | 4 byte | 4 byte | 4 byte |
double | 8 byte | 8 byte | 8 byte | |
long double | 8 byte | 8 byte | 8 byte | |
주소 | pointer | 2 byte(16bit) | 4 byte(32bit) | 8 byte(64bit) |
Windows와 Unix, Linux 시스템 간의 주요 차이점은 long
자료형입니다.
Windows에서는 long
이 항상 4바이트였던 것에 반해 Unix와 Linux에서는 long
의 크기가 시스템의 비트에 따라 변하면서 32비트 시스템에서는 4바이트, 64비트 시스템에서는 8바이트를 차지합니다.
또한, long double의 경우에는 Visual studio의 컴파일러를 기준으로 8바이트로 표시하였습니다. 그러나 다른 컴파일러나 시스템에서는 더 큰 크기를 가질 수도 있습니다.
위의 표는 일반적인 경우를 보여주며, 특정 컴파일러나 시스템에서는 다르게 설정될 수 있음을 유의해야 합니다.
자료형 범위
다음은 32bit Windows 운영체제에서 Visual Studio 컴파일러 기준 자료형 범위입니다.
자료형 | 크기 | 최소 값 | 최대 값 |
---|---|---|---|
문자형 | |||
char | 1 byte (8bit) | -128 | 127 |
wchar_t | 2 byte (16bit) | 0 | 65,535 |
정수형 | |||
bool | 1 byte (8bit) | false | true |
unsigned char | 1 byte (8bit) | 0 | 255 |
short | 2 byte (16bit) | -32,768 | 32,767 |
unsigned short | 2 byte (16bit) | 0 | 65,535 |
int | 4 byte (32bit) | -2,147,483,648 | 2,147,483,647 |
unsigned int | 4 byte (32bit) | 0 | 4,294,967,295 |
long | 4 byte (32bit) | -2,147,483,648 | 2,147,483,647 |
unsigned long | 4 byte (32bit) | 0 | 4,294,967,295 |
long long | 8 byte (64bit) | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
unsigned long long | 8 byte (64bit) | 0 | 18,446,744,073,709,551,615 |
__int8 | 1 byte (8bit) | -128 | 127 |
__int16 | 2 byte (16bit) | -32,768 | 32,767 |
__int32 | 4 byte (32bit) | -2,147,483,648 | 2,147,483,647 |
__int64 | 8 byte (64bit) | -9,223,372,036,854,775,808 | 9,223,372,036,854,775,807 |
실수형 | |||
float | 4 byte (32bit) | -3.4E+38 | 3.4E+38 |
double | 8 byte (64bit) | -1.79E+308 | 1.79E+308 |
long double | 8 byte (64bit) | -1.79E+308 | 1.79E+308 |
위에서도 언급했지만, 주의해야 할 점은, 이러한 범위는 특정 시스템 또는 컴파일러에 따라 달라질 수 있습니다. 따라서 필요에 따라 특정 시스템에서 해당 데이터 타입의 크기나 범위를 확인하는 것이 좋습니다.
각주
논리형은 참(true) 또는 거짓(false)을 판단하는 자료형입니다. true와 false는 1bit면 충분하지만, 컴퓨터가 데이터를 처리할 때 최소 단위를 바이트(byte)를 사용하기 때문에, 1byte를 사용합니다. ↩