요약
코딩 테스트를 준비하면서 정리한 변수 자료형들의 범위 및 바이트 목록입니다.
값의 범위를 어느 정도 인지하고 있어야 오버플로우를 막을 수 있습니다.
유형 이름 | 바이트 (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 10^38) ] |
double long double | 8 | 1.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비트
![](https://lycos7560.com/wp-content/uploads/image-776.png)
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
하세요.
각 형식의 크기 제한에 대한 자세한 내용은 기본 제공 형식을 참조하세요.
열거 형식의 범위는 언어 컨텍스트 및 지정된 컴파일러 플래그에 따라 달라집니다.