[C] 정수 자료형

Date:     Updated:

카테고리:

태그:

이 글은 C 정수 자료형을 공부하고 정리한 글입니다

📌 char

  • char형은 최소 8비트인 정수형
  • 표준은 8비트 이상이라고만 정의함
  • <limits.h>를 인클루드한 뒤에 CHAR_BIT를 보면 몇 비트인지 알 수 있다
  • 표준에서는 1바이트가 CHAR_BIT만큼이다
  • 표준은 기본을 signedunsigned정하지 않았다
  • char의 기본 부호가 지정 안 된 이유는 아스키의 범위가 0~127이므로 부호 여부는 상관이 없어진다
    • 단, 8비트 정수형으로 쓰려고 하면 반드시 char 앞에 `signed`나 `unsigned`를 넣어주는 게 좋다
  • 표준에서 char로 표현 가능한 숫자의 범위
    • unsinged char : 0 ~ 255
    • char : 0 ~ 127
    • signed char : -127 ~ 127
      • 왜 -128이 아니라 -127인 이유는 옛날 기계는 1의 보수를 사용 할 수 있기 때문에 안전한 포팅을 위해서
  • 표준에 상관없이 보통 안전하게 생각해도 되는 것
    • 크기 : 8비트
    • 부호(unsigned/signed)를 생략할 경우 : signed
    • 범위
      • unsigned char : 0 ~ 255
      • signed char : -128 ~ 127

📌 short

  • short형은 최소 16비트이고 char의 크기 이상인 정수형
  • int보다 메모리를 적게 쓰기 위해 사용
  • 그러나 int 대신 short를 사용할 경우 성능이 느려질 수도 있다
  • 표준에서 포팅 문제 없는 값의 범위
    • 부호 없는 short(unsigned short) : 0 ~ 65535
    • 부호 있는 short(short, signed short) : -32767 ~ 32767
  • 표준에 상관없이 보통 안전하게 생각해도 되는 것
    • 크기 : 16비트
    • 범위
      • 부호 없는 short(unsigned short) : 0 ~ 65535
      • 부호 있는 short(signed short) : -32768 ~ 32767

📌 int

  • int형은 표준에 따르면 최소 16비트이고 short의 크기 이상인 정수형
    • 예전에 16비트 CPU가 흔했기때문에 최소가 16비트이다
  • int는 그냥 정수(integer)라는 의미
  • 따라서, CPU에게 앞뒤 생략하고 ‘정수 처리해!’라고 하면 CPU가 딱 아는 크기여야 함
    • CPU의 산술논리장치가 사용하는 기본데이터
    • 이 데이터를 워드(word)라 하고, 그 크기를 워드 크리라고 함
    • 워드 크기는 레지스터 크기랑 일치
  • 32비트 컴퓨터가 나오면서 int의 크기는 32비트가 됨
  • 그러나 이제 64비트 컴퓨터인데 계속 32비트로 머묾
    • 원칙적으로 말하면 C표준을 어긴것
    • 너무 오랫동안 32비트를 int의 크기로 사용
    • 32비트에서 64비트로 바꾼다고 성능이 무조건 빨라지지도 않음
  • 표준에서 포팅 문제 없는 값의 범위
    • 부호 없는 int(unsigned int) : 0 ~ 4,294,967,295
    • 부호 있는 int(int, signed int) : -2,147,483,647 ~ 2,147,483,647
  • 표준에 상관없이 보통 안전하게 생각해도 되는 것
    • 크기 : 32비트
    • 범위
      • 부호 없는 int(unsigned int) : 0 ~ 4,294,967,295
      • 부호 있는 int(signed int) : -2,147,483,648 ~ 2,147,483,647
  • 리터럴(literal)
      unsigned int unsigned_int = 2147483648u;
    
    • u 혹은 U : 부호 없는 수를 표현하는 접미사
      • 부호 있는 수의 최댓값보다 큰 값을 unsigned int에 대입할 경우 u 혹은 U를 붙여야 함
      • 안 붙이면 경고 발생

📌 long

  • long형은 표준에 따르면 최소 32비트이고 int의 크기 이상인 정수형
    • 예전에 int가 16비트일때 그것보다 2배 큰 자료형이 필요했다
  • 표준에서 포팅에 안전한 값의 범위
    • 부호 없는 long(unsigned long) : 0 ~ 4,294,967,295
    • 부호 있는 long(long, signed long) : -2,147,483,647 ~ 2,147,483,647
  • 표준에 상관없이 보통 안전하게 생각해도 되는 것
    • 크기 : 32비트
    • 범위
      • 부호 없는 long(unsigned long) : 0 ~ 4,294,967,295
      • 부호 있는 long(signed long) : -2,147,483,648 ~ 2,147,483,647
  • 리터럴(literal)
      unsigned long signed_long = 2147483648L;
      unsigned long unsigned_long = 2147483648UL;
    
    • l 혹은 L : long을 의미하는 접미사
    • u 혹은 U : 부호 없는 수를 표현하는 접미사
    • 두 접미사를 같이 쓸 수 있음


참조

포큐아카데미 C 언매니지드 프로그래밍



💻 열심히 공부해서 작성 중이니 오류나 틀린 부분이 있을 경우 
  언제든지 댓글 혹은 메일로 알려주시면 감사하겠습니다! 😸

맨 위로 이동하기

C 카테고리 내 다른 글 보러가기

댓글 남기기