본문 바로가기
정보&팁/IT 기술

[c언어] char vs. int8_t 차이점

by 가능성의 꾸꾸 2025. 2. 26.
728x90
반응형

안녕하세요 꾸꾸입니다!

1. 기본적인 차이

타입  크기 부호(Sign) 용도
char 1바이트 (보통 8비트) 구현에 따라 signed 또는 unsigned 문자 저장 또는 작은 정수
int8_t 1바이트 (8비트 고정) 항상 signed (-128 ~ 127) 작은 정수를 저장하는 목적으로 사용

2. 타입 정의

📌 char

  • char는 C 표준에서 정확히 1바이트 크기로 정의되어 있지만, signed인지 unsigned인지 구현(컴파일러)에 따라 다를 수 있음.
  • ASCII 문자 저장에 주로 사용되며, 문자(예: 'A', 'B')와 숫자(예: 65, 66)를 혼용할 수 있음.
char c = 'A'; // ASCII 코드 65
printf("%d\n", c); // 보통 65 출력 (하지만 signed char이면 다르게 해석될 수도 있음)

📌 int8_t

  • int8_t는 C99 표준에서 <stdint.h>에 추가된 타입으로, 항상 8비트 크기를 보장하며, signed(부호 있음)이다.
  • 작은 정수값을 다룰 때 사용되며, 부호 있는 8비트 정수를 저장하는 데 유용함.
#include <stdint.h>
#include <stdio.h>

int main() {
    int8_t num = -120;
    printf("%d\n", num); // -120 출력
}

3. 부호(Sign) 차이

char가 signed인지 unsigned인지 애매할 수 있기 때문에, char를 정수로 사용할 때는 명확하게 지정하는 것이 좋음.

char c = 255;         // unsigned라면 255, signed라면 -1
int8_t num = 255;     // 오버플로우 발생 (255는 signed int8_t의 범위를 초과)

unsigned char uc = 255;
printf("%d\n", uc);   // 255 출력

📌 컴파일러에 따라 char의 기본 부호(sign)가 다를 수 있으므로, 정수를 저장할 때는 int8_t 또는 uint8_t을 사용하는 것이 안전함.


4. C 표준에서 char의 동작

  • char는 세 가지 종류가 있음:
    • char → 컴파일러 설정에 따라 signed char 또는 unsigned char로 해석됨.
    • signed char → -128 ~ 127 (항상 부호 있음).
    • unsigned char → 0 ~ 255 (항상 부호 없음).

5. 언제 char vs. int8_t를 사용해야 할까?

상황  char 사용 int8_t 사용
문자를 저장할 때 ✅ char c = 'A'; ❌ (부적절함)
작은 정수를 저장할 때 ⚠️ (부호 여부가 불명확함) ✅ (int8_t num = -100;)
바이너리 데이터 처리 (파일, 네트워크 패킷) ✅ (unsigned char 사용) ✅ (uint8_t/int8_t 사용)
메모리 크기를 정확히 제어해야 할 때 ❌ (컴파일러 의존적) ✅ (int8_t/uint8_t 사용)

결론

  • char는 문자 저장용으로 주로 사용되며, 정수형으로 사용할 경우 signed인지 unsigned인지 명확하지 않다.
  • int8_t는 항상 8비트 signed 정수형으로 이식성(포터블) 코드에서 정수를 다룰 때 더 안전하다.
  • 정수 값이 명확해야 하는 경우 int8_t 또는 uint8_t를 사용하는 것이 더 좋다! 🚀

 

728x90