Basic Knowledge/C 뜯어보기

(03) C언어기초 - 자료형(1)

미누구이 2023. 1. 8. 19:38

char 형

C89 표준에 따르면

char은 최소 8비트인 정수형이다

보통 char형 == 1byte로 알고 있는 사람이 많지만

표준에 따르면 바이트가 아닌 비트로 나타낸다

이유는 바이트의 크기를 8비트로 고정시켜두지 않았기 때문이다

1byte는 항상 8bits가 아니라는 뜻이다

 

char을 '최소' 8bits인 정수형이라 표현했는데

최소라고 표현한 이유는 컴파일러마다 다르게 적용시킬 수 있게끔 설계하라는 뜻이다(?)

 char이 몇 비트인지 찾는 법은 <limit.h> 헤더에서 CHAR_BIT를 보면 알 수 있다

 

1byte를 CHAR_BIT만큼이라고 말한다

즉, 가장 작은 단위를 CHAR_BIT크기인 1byte로 한다는 것이다

소형 기기에서는 공간이 충분하지 않을 수 있어서 char의 크기를 유동적으로 사용할 수 있게 했다

 

signed와 unsigned가 있지만 생략하면 signed가 아닐 수 있다

(컴파일러마다 다르다)

그래서 다른 환경에 포팅할 경우라면 signed와 unsigned를 명시해두는게 좋지 않을까?

 

포팅해도 문제 없는 범위

- unsigned char (0 ~ 255)

- char (0 ~ 127)

- signed char (-127 ~ 127) (-128 사용하지 않는 이유는 1의 보수를 사용하는 컴퓨터도 있을 수 있어서)

short형

최소 16비트 이상 char 크기 이상인 정수형이다

표준은 char과 비슥하게 포팅해도 문제 없는 범위

int보다 느릴 수 있음

 

int형

최소 16비트 이상 short 크기 이상인 정수형이다

CPU의 산술논리장치 (ALU)가 사용하는 기본 데이터이고

이 데이터를 워드라고 한다

int의 크기는 워드 크기

워드 크기는 레지스터 크기와 일치한다

int의 크기는 CPU 따라 다르다

예전에는 16비트 CPU가 흔했기에 최소 16비트라고 표준에서 정했다

32bits cpu에서는 int가 32비트로 사용된다

하지만 32bits가 자주 사용 되어서 64비트 cpu에서도 32비트로 사용중이다

int의 리터럴은 숫자 뒤에 u를 사용한다

unsigned int a = 2147483648u;