[C] 저장공간 할당

2021. 1. 5. 12:52프로그래밍 공부/C 공부

저장공간을 알아야하는 이유

정수 3을 저장한다고 하자, 정수 3은 작은 숫자이므로 1바이트면 충분히 저장할 수 있다.

그런데 int(4바이트) 형태의 공간에 정수 3을 저장한다면 나머지 3바이트는 낭비되게 된다.

메모리용량이 점점 증가하는 추세라고는 하지만 이러한 손실이 누적되면 비효율이 발생할 수 밖에 없다. 

 

정수형 자료구조

[signed char]

1바이트(8비트)를 할당하되, 제일 왼쪽 비트는 부호(+/-)를 결정하도록 하는 저장공간
이때 표현할 수 있는 숫자는 양수(0 ~ 127), 음수(-1 ~ -128)로 256개의 숫자이다.
ASCII코드에서 문자하나를 1바이트로 취급하기 때문에 문자는 char라고 외우는데, 사실 숫자를 넣어도 문제없다.

[unsigned char]

1바이트(8비트)모두가 숫자표현에 사용되는 저장공간
사람의 나이처럼 예상가능한 0~256사이의 양수를 갖는 수에 적당한다.

[signed short int]

부호가 있는 2바이트(16비트) 저장공간
양수 0 ~ 2^15-1, 음수 -1 ~ -2^15 까지 표현되어 총 65536개의 숫자 표현가능

[unsigned short int]

부호가 없는 2바이트(16비트) 저장공간 0~65535까지 표현

[signed long int]

부호가 있는 4바이트(32비트) 저장공간

 

[unsigned long int]

부호가 없는 4바이트(32비트) 저장공간

-- 보통 signed *** 에서 signed를 생략하고 사용한다. 예를들어 siged char는 그냥 char로 쓴다.
-- unsigned만 표기한다.


실수형 자료구조 

 
[float]

4바이트(32비트)크기가 제공되며 [2^(-127)  ~ 2^(128)]의 숫자가 제공된다. 
이때 소수점 아래는 6자리수까지 제공되기때문에 그 범위를 넘어가면 정확성이 저하된다.

[double]

8바이트, [2^(-1022) ~ 2^(1024)], 소수점이하 14자리까지 출력

**특이사항 1.실수표현
 C는 실수를 포현할때 기본적으로 double로 표현한다.
float a = 2.1 이라고 하더라도 2.1을 double로 표현하려고 한다.
그에따른 오류가 발생할 수 있다. 
float a = 2.1f 이렇게 f를 추가해야 float형이 된다. 
 
**특이사항 2.-1과 최대값의 비트 패턴
부호를 고려한 long int 형식에서 -1은 모든 비트가 1인 형식이다.
unsigned long int 에서 모든 비트가 1일경우 최대값을 의미한다.
둘은 동일한 비트 패턴을 갖기 때문에 표현하는 자료형이 달라지면 오류가 발생할 수 있다. 
예를들어 long int -1 을 %d로 출력하면 -1, %u로 출력하면 2^(32)-1이 출력된다.

'프로그래밍 공부 > C 공부' 카테고리의 다른 글

[C] void 포인터  (0) 2021.01.06
[C] 포인터 활용  (0) 2021.01.06
[C] 포인터 개념  (0) 2021.01.06
[C] if 조건문  (0) 2021.01.05
[C] 지역변수와 전역변수(+ extern, static, const)  (0) 2021.01.05