[C] 정수 자료형
카테고리: C
태그: Type
이 글은 C 정수 자료형을 공부하고 정리한 글입니다
📌 char
- char형은 최소 8비트인 정수형
- 표준은 8비트 이상이라고만 정의함
<limits.h>
를 인클루드한 뒤에CHAR_BIT
를 보면 몇 비트인지 알 수 있다- 표준에서는 1바이트가
CHAR_BIT
만큼이다 - 표준은 기본을
signed
나unsigned
로 정하지 않았다 - char의 기본 부호가 지정 안 된 이유는 아스키의 범위가 0~127이므로 부호 여부는 상관이 없어진다
- 단, 8비트 정수형으로 쓰려고 하면 반드시 char 앞에 `signed`나 `unsigned`를 넣어주는 게 좋다
- 표준에서 char로 표현 가능한 숫자의 범위
unsinged char
: 0 ~ 255char
: 0 ~ 127signed char
: -127 ~ 127- 왜 -128이 아니라 -127인 이유는 옛날 기계는 1의 보수를 사용 할 수 있기 때문에 안전한 포팅을 위해서
- 표준에 상관없이 보통 안전하게 생각해도 되는 것
- 크기 : 8비트
- 부호(unsigned/signed)를 생략할 경우 :
signed
- 범위
unsigned char
: 0 ~ 255signed char
: -128 ~ 127
📌 short
- short형은 최소 16비트이고 char의 크기 이상인 정수형
- int보다 메모리를 적게 쓰기 위해 사용
- 그러나 int 대신 short를 사용할 경우 성능이 느려질 수도 있다
- 표준에서 포팅 문제 없는 값의 범위
- 부호 없는 short(
unsigned short
) : 0 ~ 65535 - 부호 있는 short(
short
,signed short
) : -32767 ~ 32767
- 부호 없는 short(
- 표준에 상관없이 보통 안전하게 생각해도 되는 것
- 크기 : 16비트
- 범위
- 부호 없는 short(
unsigned short
) : 0 ~ 65535 - 부호 있는 short(
signed short
) : -32768 ~ 32767
- 부호 없는 short(
📌 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
- 부호 없는 int(
- 표준에 상관없이 보통 안전하게 생각해도 되는 것
- 크기 : 32비트
- 범위
- 부호 없는 int(
unsigned int
) : 0 ~ 4,294,967,295 - 부호 있는 int(
signed int
) : -2,147,483,648 ~ 2,147,483,647
- 부호 없는 int(
- 리터럴(literal)
unsigned int unsigned_int = 2147483648u;
u
혹은U
: 부호 없는 수를 표현하는 접미사- 부호 있는 수의 최댓값보다 큰 값을 unsigned int에 대입할 경우
u
혹은U
를 붙여야 함 - 안 붙이면 경고 발생
- 부호 있는 수의 최댓값보다 큰 값을 unsigned int에 대입할 경우
📌 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
- 부호 없는 long(
- 표준에 상관없이 보통 안전하게 생각해도 되는 것
- 크기 : 32비트
- 범위
- 부호 없는 long(
unsigned long
) : 0 ~ 4,294,967,295 - 부호 있는 long(
signed long
) : -2,147,483,648 ~ 2,147,483,647
- 부호 없는 long(
- 리터럴(literal)
unsigned long signed_long = 2147483648L; unsigned long unsigned_long = 2147483648UL;
l
혹은L
: long을 의미하는 접미사u
혹은U
: 부호 없는 수를 표현하는 접미사- 두 접미사를 같이 쓸 수 있음
참조
💻 열심히 공부해서 작성 중이니 오류나 틀린 부분이 있을 경우
언제든지 댓글 혹은 메일로 알려주시면 감사하겠습니다! 😸
댓글 남기기