C++ 데이터 형식 범위 (Microsoft Visual C++)

요약

코딩 테스트를 준비하면서 정리한 변수 자료형들의 범위 및 바이트 목록입니다.

값의 범위를 어느 정도 인지하고 있어야 오버플로우를 막을 수 있습니다.

유형 이름 바이트(1byte = 8bit) 값의 범위
int signed int long long int signed long signed long int 4 –2,147,483,648 ~ 2,147,483,647 / [ -231 ~ (231 - 1) ]
unsigned unsigned int unsigned long unsigned long int 4 0 ~ 4,294,967,295 / [ 0 ~ (232 - 1) ]
bool 1 false 또는 true (0 또는 1)
char signed char 1 -128 ~ 127 / [ -27 ~ (27 - 1) ]
unsigned char 1 0 ~ 255 / [ 0 ~ (28 - 1) ]
short 2 –32,768 ~ 32,767 / [ -215 ~ (215 - 1) ]
unsigned short 2 0 ~ 65,535 / [ 0 ~ (216 - 1) ]
long long long long int signed long long signed long long int 8 –9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 / [ -263 ~ (263 - 1) ]
unsigned long long unsigned long long int 8 0 ~ 18,446,744,073,709,551,615 / [ 0 ~ (264 - 1) ]
float 4 3.4E+/-38(7개의 자릿수) / [ (3.4 X 10-38) ~ (3.4 X 1038) ]
double long double 8 1.7E+/-308(15개의 자릿수) / [ (1.7 X 10-308) ~ (1.7 X 10308) ]

# int와 long은 다른 타입입니다.

https://smallpants.tistory.com/10 <- 참고

long이 int보다 더 큰 범위를 보관할 수 있다고 보는 것은 옳지 않다.

int는 운영체제의 환경(32bit, 64bit 등)에 맞는 크기로 사용되어 왔는데

아래와 같이 16비트 운영체제에서는 16비트로 사용되었고

32비트 운영체제에서는 32비트로 사용되었는데

64비트 운영체제에서 int가 64비트가 되면 long보다 크기가 커지게 되므로

int가 아닌 long을 8바이트로 늘려서 사용하게 되었다고 한다.

그러므로 32비트 기반으로 컴파일하게 되면 int와 long의 자료형의 길이는 같다.

(windows의 경우 64비트로 컴파일해도 같다. 이유는 맨 아래에)

16비트 운영체제

  • short : 16비트

  • int : 16비트

  • long : 32비트

32비트 운영체제

  • short : 16비트

  • int : 32비트

  • long : 32비트

64비트 운영체제

  • short : 16비트

  • int : 32비트

  • long : 64비트


MS 문서

https://learn.microsoft.com/ko-kr/cpp/cpp/data-type-ranges?view=msvc-170

Microsoft C++ 32비트 및 64비트 컴파일러는 이 문서의 뒷부분에 있는 표의 형식을 인식합니다.

int (unsigned int)

__int8 (unsigned __int8)

__int16 (unsigned __int16)

__int32 (unsigned __int32)

__int64 (unsigned __int64)

short (unsigned short)

long (unsigned long)

long long (unsigned long long)

이름이 두 개의 밑줄(__)로 시작하는 경우 데이터 형식은 비표준입니다.

다음 표에 지정된 범위는 포함-포함입니다.

유형 이름 바이트 기타 이름 값의 범위
int 4 signed –2,147,483,648 ~ 2,147,483,647
unsigned int 4 unsigned 0 ~ 4,294,967,295
__int8 1 char -128 ~ 127
unsigned __int8 1 unsigned char 0 ~ 255
__int16 2 short, short int, signed short int –32,768 ~ 32,767
unsigned __int16 2 unsigned short, unsigned short int 0 ~ 65,535
__int32 4 signed, signed int, int –2,147,483,648 ~ 2,147,483,647
unsigned __int32 4 unsigned, unsigned int 0 ~ 4,294,967,295
__int64 8 long long, signed long long –9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
unsigned __int64 8 unsigned long long 0 ~ 18,446,744,073,709,551,615
bool 1 없음 false 또는 true
char 1 없음 기본적으로 -128에서 127까지 를 사용하여 컴파일하는 경우 0~255 /J
signed char 1 없음 -128 ~ 127
unsigned char 1 없음 0 ~ 255
short 2 short int, signed short int –32,768 ~ 32,767
unsigned short 2 unsigned short int 0 ~ 65,535
long 4 long int, signed long int –2,147,483,648 ~ 2,147,483,647
unsigned long 4 unsigned long int 0 ~ 4,294,967,295
long long 8 none(하지만 해당)__int64 –9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
unsigned long long 8 none(하지만 해당)unsigned __int64 0 ~ 18,446,744,073,709,551,615
enum 다름 없음
float 4 없음 3.4E+/-38(7개의 자릿수)
double 8 없음 1.7E+/-308(15개의 자릿수)
long double 같기 double 없음 double​과 동일
wchar_t 2 __wchar_t 0 ~ 65,535

__wchar_t 변수는 사용 방법에 따라 와이드 문자 형식 또는 멀티바이트 문자 형식을 지정합니다.

문자 또는 문자열 상수 앞에 L 접두사를 사용하여 와이드 문자 형식 상수를 지정합니다.

signed 및 unsigned 는 bool​을 제외한 모든 정수 형식에서 사용할 수 있는 한정자입니다.

char, signed char 및 unsigned char​는 오버로드 및 템플릿과 같은 메커니즘에 사용되는 3가지 고유 형식입니다.

int 및 unsigned int 형식의 크기는 4바이트입니다.

그러나 언어 표준에서 구현 전용으로 허용되므로 이식 가능한 코드는 int 의 크기에 의존해서는 안 됩니다.

Visual Studio의 C/C++에서도 크기가 지정된 정수 형식을 지원합니다.

자세한 내용은 정수 제한 및 정수 제한을 참조 __int8, __int16, __int32, __int64 하세요.

각 형식의 크기 제한에 대한 자세한 내용은 기본 제공 형식을 참조하세요.

열거 형식의 범위는 언어 컨텍스트 및 지정된 컴파일러 플래그에 따라 달라집니다.