C++ 데이터 타입의 값 범위란?
C++의 모든 데이터 타입은 저장할 수 있는 값의 범위, 즉 최솟값부터 최댓값까지의 메모리 범위가 정해져 있습니다. 변수에 담을 수 있는 값의 한계를 정확히 아는 것은 오버플로우(overflow) 같은 오류를 예방하는 데 매우 중요합니다.
그러나 이렇게 큰 숫자들의 범위를 전부 외우는 것은 어렵습니다. 그래서 C++에서는 각 데이터 타입의 최솟값과 최댓값을 나타내는 매크로(macro)를 제공합니다. 매크로를 사용하면 긴 숫자를 직접 입력하지 않고도 해당 값을 바로 변수에 대입하거나 출력할 수 있습니다.
대표적인 예: char와 int
'char'(부호 있는)는 문자 데이터 타입으로 -128부터 127까지의 값을 저장할 수 있으며, 최솟값은 CHAR_MIN, 최댓값은 CHAR_MAX 매크로로 확인할 수 있습니다.
마찬가지 방식으로 어떤 데이터 타입이든 MIN/MAX 매크로를 통해 범위를 구할 수 있습니다. 예를 들어 'int' 타입에는 INT_MIN과 INT_MAX를 사용합니다.
- char의 범위: -128 ~ 127
- int의 범위: -2147483648 ~ 2147483647
자주 사용되는 범위 매크로
| 데이터 타입 | 최솟값 매크로 | 최댓값 매크로 | 헤더 파일 |
|---|---|---|---|
| char | CHAR_MIN | CHAR_MAX | <climits> |
| signed char | SCHAR_MIN | SCHAR_MAX | |
| unsigned char | 0 | UCHAR_MAX | |
| short int | SHRT_MIN | SHRT_MAX | |
| int | INT_MIN | INT_MAX | |
| unsigned int | 0 | UINT_MAX | |
| long int | LONG_MIN | LONG_MAX | |
| float | FLT_MIN | FLT_MAX | <cfloat> |
| double | DBL_MIN | DBL_MAX |
참고로 FLT_MIN과 DBL_MIN은 '가장 작은 음수'가 아니라 '표현 가능한 가장 작은 양수'를 의미한다는 점에 유의하세요.
예제 코드
다음은 C++에서 데이터 타입별 매크로를 사용해 값 범위를 출력하는 코드입니다.
#include <iostream>
#include <climits>
#include <cfloat>
using namespace std;
int main() {
cout << "Range of char : " << CHAR_MIN << " to " << CHAR_MAX << endl;
cout << "Range of int : " << INT_MIN << " to " << INT_MAX << endl;
cout << "Range of float : " << FLT_MIN << " to " << FLT_MAX << endl;
cout << "Range of double : " << DBL_MIN << " to " << DBL_MAX << endl;
cout << "Range of signed char : " << SCHAR_MIN << " to " << SCHAR_MAX << endl;
cout << "Range of unsigned char : " << 0 << " to " << UCHAR_MAX << endl;
cout << "Range of long int : " << LONG_MIN << " to " << LONG_MAX << endl;
cout << "Range of unsigned int : " << 0 << " to " << UINT_MAX << endl;
cout << "Range of short int : " << SHRT_MIN << " to " << SHRT_MAX << endl;
return 0;
}
실행 결과
위 코드를 실행하면 다음과 같은 결과가 출력됩니다.
Range of char : -128 to 127
Range of int : -2147483648 to 2147483647
Range of float : 1.17549e-38 to 3.40282e+38
Range of double : 2.22507e-308 to 1.79769e+308
Range of signed char : -128 to 127
Range of unsigned char : 0 to 255
Range of long int : -9223372036854775808 to 9223372036854775807
Range of unsigned int : 0 to 4294967295
Range of short int : -32768 to 32767
정리
C++에서는 <climits>(구 limits.h)와 <cfloat>(구 float.h) 헤더 파일에 정의된 MIN/MAX 매크로를 활용하면 각 데이터 타입이 표현할 수 있는 값의 범위를 손쉽게 확인할 수 있습니다. 하드코딩된 숫자 대신 매크로를 사용하면 코드의 가독성과 이식성이 크게 향상됩니다.