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
40 ~ 4,294,967,295 / [ 0 ~ (232 – 1) ]
bool1false 또는 true (0 또는 1)
char
signed char
1-128 ~ 127 / [ -27 ~ (27 – 1) ]
unsigned char10 ~ 255 / [ 0 ~ (28 – 1) ]
short2–32,768 ~ 32,767 / [ -215 ~ (215 – 1) ]
unsigned short20 ~ 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
80 ~ 18,446,744,073,709,551,615 / [ 0 ~ (264 – 1) ]
float43.4E+/-38(7개의 자릿수) / [ (3.4 X 10^-38) ~ (3.4 X 10^38) ]
double
long double
81.7E+/-308(15개의 자릿수) / [ (1.7 X 10^-308) ~ (1.7 X 10^308) ]

# 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)

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

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

유형 이름바이트기타 이름값의 범위
int4signed–2,147,483,648 ~ 2,147,483,647
unsigned int4unsigned0 ~ 4,294,967,295
__int81char-128 ~ 127
unsigned __int81unsigned char0 ~ 255
__int162shortshort intsigned short int–32,768 ~ 32,767
unsigned __int162unsigned shortunsigned short int0 ~ 65,535
__int324signedsigned intint–2,147,483,648 ~ 2,147,483,647
unsigned __int324unsignedunsigned int0 ~ 4,294,967,295
__int648long longsigned long long–9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
unsigned __int648unsigned long long0 ~ 18,446,744,073,709,551,615
bool1없음false 또는 true
char1없음기본적으로 -128에서 127까지
를 사용하여 컴파일하는 경우 0~255 /J
signed char1없음-128 ~ 127
unsigned char1없음0 ~ 255
short2short intsigned short int–32,768 ~ 32,767
unsigned short2unsigned short int0 ~ 65,535
long4long intsigned long int–2,147,483,648 ~ 2,147,483,647
unsigned long4unsigned long int0 ~ 4,294,967,295
long long8none(하지만 해당)__int64–9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
unsigned long long8none(하지만 해당)unsigned __int640 ~ 18,446,744,073,709,551,615
enum다름없음
float4없음3.4E+/-38(7개의 자릿수)
double8없음1.7E+/-308(15개의 자릿수)
long double같기 double없음double과 동일
wchar_t2__wchar_t0 ~ 65,535

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

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

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

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

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

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

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

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

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

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

댓글 달기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다

위로 스크롤