본문 바로가기

프로그래밍 언어/C

C 언어 정수형(Integer Types) 크기, 범위, 활용법

C 언어의 정수형(Integer Types) 크기, 범위, 활용법

C 언어에서 정수형 데이터 타입은 숫자 기반 연산과 메모리 효율성을 좌우하는 핵심적인 요소입니다. int, short, long, unsigned 등 다양한 정수형 타입들은 각각 크기, 표현 범위, 부호 여부에 따라 용도가 명확히 구분됩니다. 본 글에서는 이들 타입의 내부 구조, 활용법, 그리고 플랫폼별 차이점까지 깊이 있게 살펴봅니다. 초보자부터 고급 사용자까지 모두가 실전에서 바로 활용할 수 있는 정보를 담았습니다.

 

 

목차

  1. 정수형 타입이 중요한 이유
  2. C의 기본 정수형 타입
  3. signed와 unsigned의 차이
  4. 크기와 범위: sizeof로 알아보기
  5. long, long long의 활용과 주의점
  6. 플랫폼 독립적인 정수형: stdint.h
  7. 실전에서 정수형 타입을 고를 때 팁

 

1. 정수형 타입이 중요한 이유

컴퓨터는 수를 처리하기 위해 메모리를 사용합니다. 정수형 타입을 적절하게 선택하는 것은 다음과 같은 이유로 중요합니다:

  • 메모리 효율성: 필요한 만큼의 크기만 사용
  • 자료 정확도: 오버플로우 및 언더플로우 방지
  • 호환성: 하드웨어 및 컴파일러 환경에 따른 문제 회피

예를 들어 센서 값, ID 번호, 카운터 등은 각각 적절한 정수형을 요구합니다.

 

 

 

2. C의 기본 정수형 타입

C 언어는 다음과 같은 기본 정수형을 제공합니다.

타입 표현 가능 범위 (32비트 기준) 설명
char -128 ~ 127 1바이트 크기의 정수형. 주로 문자 저장에 사용
short -32,768 ~ 32,767 2바이트 정수형, 메모리 절약용
int -2,147,483,648 ~ 2,147,483,647 기본 정수형 타입
long -2,147,483,648 ~ 2,147,483,647 int와 동일한 경우도 있음 (시스템에 따라 다름)

 

 

 

3. signedunsigned의 차이

C에서 정수형은 부호 있는(signed) 값과 부호 없는(unsigned) 값으로 나뉩니다.

  • signed int: 양수와 음수 모두 표현
  • unsigned int: 양수만 표현 → 더 넓은 양의 범위 가능

예를 들어, 나이, 인덱스, 카운터 등 음수가 될 수 없는 데이터에는 unsigned가 적절합니다.

 

 

 

4. 크기와 범위: sizeof로 알아보기

정수형의 실제 크기는 플랫폼과 컴파일러에 따라 다릅니다. 이를 확인하려면 sizeof 연산자를 사용합니다:

#include <stdio.h>

int main() {
    printf("int: %lu bytes\n", sizeof(int));
    printf("long: %lu bytes\n", sizeof(long));
    return 0;
}
  

출력 결과는 시스템에 따라 4 또는 8 바이트일 수 있습니다.

 

 

 

 

5. long, long long의 활용과 주의점

큰 범위의 수를 다룰 때는 long 또는 long long을 사용합니다.

  • long: 4 또는 8바이트
  • long long: 최소 8바이트 보장

64비트 연산이 필요한 경우, long long 또는 uint64_t가 적합합니다.

 

 

 

6. 플랫폼 독립적인 정수형: stdint.h

C99 표준부터는 플랫폼에 상관없이 명확한 크기의 정수형을 사용할 수 있도록 <stdint.h>를 도입했습니다.

  • int8_t, uint8_t: 8비트
  • int16_t, uint16_t: 16비트
  • int32_t, uint32_t: 32비트
  • int64_t, uint64_t: 64비트

임베디드 시스템, 이식 가능한 라이브러리 등에서 강력히 추천됩니다.

 

 

 

7. 실전에서 정수형 타입을 고를 때 팁

실전에서는 다음 기준에 따라 정수형 타입을 선택하세요.

  1. 음수가 필요한가? → signed
  2. 데이터 최대 범위는? → long, unsigned
  3. 이식성과 명확성이 중요한가? → stdint.h
  4. 메모리가 민감한가? → char, short 고려

또한, 연산 결과의 범위를 예측할 수 없다면 항상 오버플로우 검사를 고려하는 습관이 중요합니다.