1. 개요
1.1 문서 개요
이 문서는 C++에서 사용되는 정수형 데이터 타입(Integer Types)에 대해 정리하는 문서입니다. C++의 정수형은 다양한 크기와 부호 여부에 따라 세분화되어 있으며, 메모리 크기 및 처리 속도와 관련하여 중요한 역할을 합니다. C++에서의 정수형은 프로그램의 데이터 표현, 연산 효율성, 메모리 최적화에 있어 기초적인 구성 요소로 분류됩니다.
2. 내용
2.1 C++의 기본 정수형 타입
2.1.1 정수형 타입 목록과 특징
C++에서는 다양한 정수형 타입을 제공하며, 기본적으로 다음과 같이 분류됩니다.
타입 이름 | 크기 (Byte) | 부호 여부 | 값의 범위 (대략) |
---|---|---|---|
short |
2 | signed | -32,768 ~ 32,767 |
unsigned short |
2 | unsigned | 0 ~ 65,535 |
int |
4 | signed | -2,147,483,648 ~ 2,147,483,647 |
unsigned int |
4 | unsigned | 0 ~ 4,294,967,295 |
long |
4 또는 8 | signed | 플랫폼 의존적 |
unsigned long |
4 또는 8 | unsigned | 플랫폼 의존적 |
long long |
8 | signed | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 |
unsigned long long |
8 | unsigned | 0 ~ 18,446,744,073,709,551,615 |
※ 실제 크기와 범위는 컴파일러 및 운영 체제에 따라 달라질 수 있으며, 정확한 크기는 sizeof()
연산자를 통해 확인할 수 있습니다.
2.1.2 부호 있는 정수형과 부호 없는 정수형
정수형에는 signed
와 unsigned
가 있으며, 부호 여부에 따라 표현할 수 있는 값의 범위가 달라집니다.
signed int
: 음수와 양수 모두 표현 가능unsigned int
: 0 이상의 양수만 표현, 범위가 두 배로 증가
예:
signed int a = -100;
unsigned int b = 100;
2.1.3 sizeof()
를 이용한 크기 확인
#include <iostream>
using namespace std;
int main() {
cout << "int: " << sizeof(int) << " bytes\n";
cout << "long: " << sizeof(long) << " bytes\n";
cout << "short: " << sizeof(short) << " bytes\n";
cout << "long long: " << sizeof(long long) << " bytes\n";
return 0;
}
2.2 C++ 정수형과 데이터 범위 관리
2.2.1 오버플로우와 언더플로우
정수형 변수에 타입의 범위를 초과하는 값을 대입하거나 연산하면 오버플로우 또는 언더플로우가 발생할 수 있습니다.
예:
#include <iostream>
using namespace std;
int main() {
unsigned short x = 65535;
x = x + 1; // 오버플로우 발생
cout << x << endl; // 0 출력
return 0;
}
2.2.2 안전한 범위 연산을 위한 자료형 선택
데이터의 최대값을 예상할 수 있는 경우, 가장 적절한 크기의 정수형을 선택하여 메모리를 절약할 수 있습니다. 그러나 불확실한 경우에는 long long
또는 uint64_t
등 넉넉한 타입을 사용하는 것이 일반적입니다.
2.3 고정 크기 정수형 (<cstdint>
)
2.3.1 stdint.h
또는 cstdint
의 활용
C++11 이후에는 정확한 크기의 정수형을 제공하는 헤더 파일 <cstdint>
이 도입되었습니다. 다음과 같은 정수형을 제공합니다:
int8_t
,int16_t
,int32_t
,int64_t
: 부호 있는 고정 크기 정수형uint8_t
,uint16_t
,uint32_t
,uint64_t
: 부호 없는 고정 크기 정수형
예:
#include <cstdint>
#include <iostream>
using namespace std;
int main() {
int16_t a = 32767;
uint32_t b = 4000000000;
cout << "a: " << a << ", b: " << b << endl;
return 0;
}
이러한 고정 크기 정수형은 크로스 플랫폼 개발 시 자료형의 일관성을 유지할 수 있는 장점이 있습니다.
3. 마무리
C++의 정수형은 프로그램의 메모리 효율성, 데이터 범위 관리, 연산 안정성을 좌우하는 기초적인 요소입니다. 각 정수형은 크기와 부호에 따라 다양한 선택지를 제공하며, sizeof()
연산자 및 <cstdint>
의 고정 크기 타입을 통해 보다 명확하고 안전한 코드 구성이 가능합니다. 자료형 선택은 주어진 문제의 요구 사항에 따라 신중히 이루어져야 하며, 이는 전체 시스템의 안정성과 성능에 직접적인 영향을 미칩니다.