11. C++ 정수형

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 부호 있는 정수형과 부호 없는 정수형

정수형에는 signedunsigned가 있으며, 부호 여부에 따라 표현할 수 있는 값의 범위가 달라집니다.

  • 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>의 고정 크기 타입을 통해 보다 명확하고 안전한 코드 구성이 가능합니다. 자료형 선택은 주어진 문제의 요구 사항에 따라 신중히 이루어져야 하며, 이는 전체 시스템의 안정성과 성능에 직접적인 영향을 미칩니다.

댓글 달기

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

error: Content is protected !!
위로 스크롤