icon안동민 개발노트

기본 데이터 타입


개요

 C++에서 기본 데이터 타입은 프로그램에서 사용되는 가장 기본적인 데이터의 형태를 정의합니다. 이러한 타입들은 메모리 사용, 연산 속도, 정밀도 등에서 서로 다른 특성을 가지고 있어, 상황에 맞는 적절한 타입을 선택하는 것이 중요합니다.

정수형 (Integer Types)

 정수형은 소수점이 없는 숫자를 표현하는 데 사용됩니다.

  1. int : 기본 정수형
  • 크기 : 일반적으로 4바이트 (32비트)
  • 범위 : -2,147,483,648 ~ 2,147,483,647
  • 사용 예 : int count = 10;
  1. short : 작은 범위의 정수
  • 크기 : 일반적으로 2바이트 (16비트)
  • 범위 : -32,768 ~ 32,767
  • 사용 예 : short small_number = 1000;
  1. long : 큰 범위의 정수
  • 크기 : 시스템에 따라 4바이트 또는 8바이트
  • 범위 : 최소 -2,147,483,648 ~ 2,147,483,647
  • 사용 예 : long big_number = 1000000L;
  1. long long : 매우 큰 범위의 정수
  • 크기 : 일반적으로 8바이트 (64비트)
  • 범위 : -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807
  • 사용 예 : long long very_big_number = 1000000000000LL;
  1. 부호 없는 정수형 : unsigned
  • unsigned 키워드를 사용하여 음수를 표현하지 않는 대신 양수의 범위를 확장
  • 사용 예 : unsigned int positive_only = 4294967295;

부동소수점형 (Floating-Point Types)

 부동소수점형은 소수점이 있는 실수를 표현하는 데 사용됩니다.

  1. float : 단정도 부동소수점
  • 크기 : 4바이트
  • 정밀도 : 약 7자리의 십진 자릿수
  • 사용 예 : float pi = 3.14159f;
  1. double : 배정도 부동소수점
  • 크기 : 8바이트
  • 정밀도 : 약 15자리의 십진 자릿수
  • 사용 예 : double precise_pi = 3.141592653589793;
  1. long double : 확장 정밀도 부동소수점
  • 크기 : 시스템에 따라 다름 (일반적으로 8바이트 이상)
  • 정밀도 : 최소 double과 같음
  • 사용 예 : long double very_precise_pi = 3.141592653589793238L;

문자형 (Character Types)

 문자형은 문자를 표현하는 데 사용됩니다.

  1. char : 기본 문자형
  • 크기 : 1바이트
  • ASCII 문자 표현
  • 사용 예 : char grade = 'A';
  1. wchar_t : 와이드 문자형
  • 크기 : 시스템에 따라 2바이트 또는 4바이트
  • 유니코드 문자 표현
  • 사용 예 : wchar_t wide_char = L'가';
  1. C++ 11 이후 추가된 문자형
  • char16_t : UTF-16 문자 표현 (2바이트)
  • char32_t : UTF-32 문자 표현 (4바이트)

불리언형 (Boolean Type)

 불리언형은 참 / 거짓 값을 표현하는 데 사용됩니다.

  • bool : true 또는 false 값만 가질 수 있음
  • 사용 예 : bool is_correct = true;

데이터 타입의 크기와 범위

 각 데이터 타입의 정확한 크기와 범위는 시스템에 따라 다를 수 있습니다.

  1. sizeof 연산자 : 데이터 타입의 크기를 바이트 단위로 반환
cout << "int의 크기: " << sizeof(int) << " 바이트" << endl;
  1. <limits> 헤더 : 각 타입의 최소값과 최대값 제공
#include <limits>
cout << "int의 최대값: " << std::numeric_limits<int>::max() << endl;

타입 변환 (Type Conversion)

  1. 암시적 변환 (Implicit Conversion)
  • 컴파일러가 자동으로 수행하는 변환
  • 예 : intdouble에 할당할 때
  1. 명시적 변환 (Explicit Conversion) - 캐스팅
  • C 스타일 캐스트 : (type)value
  • C++ 스타일 캐스트 : static_cast<type>(value)

실습

  1. 각 데이터 타입의 크기 출력하기
#include <iostream>
using namespace std;
 
int main() {
    cout << "char: " << sizeof(char) << " 바이트" << endl;
    cout << "int: " << sizeof(int) << " 바이트" << endl;
    cout << "float: " << sizeof(float) << " 바이트" << endl;
    cout << "double: " << sizeof(double) << " 바이트" << endl;
    return 0;
}
  1. 정수형과 부동소수점형의 범위 확인하기
#include <iostream>
#include <limits>
using namespace std;
 
int main() {
    cout << "int 최소값: " << numeric_limits<int>::min() << endl;
    cout << "int 최대값: " << numeric_limits<int>::max() << endl;
    cout << "float 최소값: " << numeric_limits<float>::min() << endl;
    cout << "float 최대값: " << numeric_limits<float>::max() << endl;
    return 0;
}
  1. 타입 변환 실습
#include <iostream>
using namespace std;
 
int main() {
    int i = 10;
    double d = 3.14;
    
    double result1 = i + d;  // 암시적 변환
    int result2 = static_cast<int>(d);  // 명시적 변환
    
    cout << "result1: " << result1 << endl;
    cout << "result2: " << result2 << endl;
    return 0;
}

주의사항

  1. 오버플로우 (Overflow) : 변수가 표현할 수 있는 최대값을 넘어갈 때 발생
  2. 언더플로우 (Underflow) : 변수가 표현할 수 있는 최소값보다 작아질 때 발생
  3. 부동소수점 정밀도 문제 : 이진 표현의 한계로 인한 정확성 손실 가능성

연습 문제

  1. 다음 코드의 출력 결과를 예측해보세요.
int a = 2147483647;
cout << a + 1 << endl;
  1. floatdouble 타입의 정밀도 차이를 보여주는 프로그램을 작성하세요.
  2. 문자 'A'의 ASCII 값을 출력하는 프로그램을 작성하세요.
  3. 부호 있는 정수형과 부호 없는 정수형의 차이를 설명하는 예제 프로그램을 작성하세요.
  4. long long 타입을 사용하여 1부터 20까지의 팩토리얼 값을 계산하고 출력하는 프로그램을 작성하세요.


참고 자료