C

c언어-메모리와 자료형

코듀Codyou 2022. 10. 2. 14:09

모든 언어로 코드를 짤 때 사용하는 필수적인 것은 변수입니다

변수는 저장하고자 하는 글이나 숫자 등을 저장할 수 있는 것으로 메모리라는 공간에 할당됩니다.

변수에 무엇을 저장하고자에 따라 c언어에서는 자료형을 필요로 하는데 오늘은 이에 대해 배워볼 것입니다.

 

이번주 학습의 목차입니다.

1. 메모리
   1-1. bit
   1-2. byte
2. 자료형
   2-1. 숫자를 담는 자료형
      2-1-1. 변수의 저장 가능 값의 범위와 signed, insigned
      2-1-2.signed
      2-1-3. unsigned
      2-1-4. 정수형과 실수형
   2-2. 문자를 담는 변수

 

1. 메모리

자료형에 들어가기에 앞서 메모리에 공간을 할당하여 저장하는 방법에 대해 알아보도록 합시다.

메모리에 공간을 할당하기 위하여 bit로 구성된 byte라는 공간을 사용합니다.

 

 

1-1. bit

bit란 0 또는 1을 저장할 수 있는 공간으로 0과 1 두 가지를 저장할 수 있습니다.

따라서 n bit를 사용하였을 때 표현할 수 있는 정보의 갯수는 각각의 n개의 bit에 0 또는 1을 저장할 경우의 수이므로

2^n 개인 것을 알 수 있습니다.

또한 위의 예를 통해 정보를 저장하기 위해 사용하는 bit의 수가 많아질수록 더 많은 정보를 저장할 수 있다는 점 또한 알 수 있습니다.

 

 

1-2. byte

8개의 bit로 구성된 메모리 묶음을 byte라고 합니다.

따라서 1byte는 2^8개의 숫자를 저장할 수 있습니다.

또한 메모리 저장에 대해서 이야기 할 때 사용하는 단위는 통상적으로 byte을 사용한다는 점을 알아두면 좋습니다.

 

2. 자료형

이제 byte에 대해 공부하였으니 변수의 자료형에 대해 알아봅시다.

c언어의 가장 기본이 되는 변수의 자료형은 크게 숫자와 문자로 나뉩니다.

그리고 더 자세히 들어가게 되면 숫자에서는 정수형과 실수형, 문자에서는 문자 1개와 문자열로 알아볼 수 있습니다.

 

 

2-1. 숫자를 담는 자료형

숫자를 담는 자료형에 대해 자세히 알아보자면,

크게 소수점 값 여부에 따라 정수형과 실수형으로 나뉘고

정수형의 경우에는 음수 저장 여부에 따라 자료형 선언이 달라집니다.

효율적인 메모리 사용을 위해 자료형을 지정할 때에는,

변수에 담게 될 숫자의 타입을 고려하여 자료형을 지정할 수 있습니다.

 

 

 

2-1-1. 변수의 저장 가능 값의 범위와 signed, insigned

정수형 자료형 앞에 'signed'를 붙여주면 음수, 0, 양수를 모두 담을 수 있는 변수가 지정되고

'unsigned'를 붙여주면 0과 양수를 저장할 수 있는 변수가 지정됩니다.

 

변수의 메모리가 4 byte로 구성된 int 자료형으로 설명하자면

양수와 음수, 0을 모두 저장하는 signed 타입에서 변수가 저장할 수 있는 값의 범위는

-2^31 ~ 0 ~ (2^31-1)입니다.

이때 생길 수 있는 궁금증으로는 저장할 수 있는 값이 2^32가 아니라 31인 이유와

양수의 최댓값이 2^31 -1 인 이유일 것입니다.

 

첫 번째,

최대로 저장할 수 있는 최댓값의 절댓값이 2^31인 이유는

해당 변수가 음수와 양수를 모두 저장하기 때문에, 8X4의 32  bit 모두에 숫자를 저장하지 않고 한 bit에는 부호를 저장하기 때문입니다.

 

두 번째,

양수의 최댓값이 2^31 -1인 이유는 0을 저장하기 때문에

0을 제외한 숫자에서 저장할 수 있는 숫자의 개수가 1개 줄었기 때문입니다.

 

 

 

2-1-2.signed

변수에 양수와 음수와 0 모두를 담을 수 있는 자료형을 만들기 위해서는

자료형 앞에 'signed'를 작성해 주거나 이를 생략하고 자료형만을 작성하는 방법이 있습니다.

양수, 음수, 0 모두를 표현할 수 있기 때문에  

n byte를 통해 표현할 수 있는 숫자의 범위는 -2^(n-1) ~ 0 ~ 2^(n-1)-1입니다

 

 

2-1-3. unsigned

변수에 양수와 0을 담을 수 있는 자료형을 만들기 위해서는

자료형 앞에 'unsigned'를 붙여 변수를 지정해 줍니다.

이때 n byte를 통해 표현할 수 있는 숫자의 범위는 0~ 2^n-1입니다.

 

 

2-1-4. 정수형과 실수형

숫자를 저장할 수 있는 자료형은 담고자 하는 숫자가 정수 또는 실수이냐에 따라

정수형과 실수형으로 나뉘게 됩니다.

정수형으로는 short, int, long, char 등이 있으며 실수형으로는 float, double, long double 등이 있습니다.

 

 

2-2. 문자를 담는 변수

문자를 저장하는 변수로는 char이 있습니다.

문자를 저장할 때에는 문자 그대로 저장하는 것이 아니라 저장하고자 하는 문자의 아스키코드를 저장하여

실질적으로 char 자료형의 안에 저장되어 있는 값은 숫자가 저장되어 있습니다.

 

위의 2번 항목의 변수의 자료형을 정리하면 아래의 표와 같습니다.

정수형 실수형
data type 할당 메모리 범위 data type 할당메모리 범위
short 2byte signed:
-32768~32767
unsigned:
0 ~65535
float 4byte 1.4e-38~3.4e+38
int 4byte signed:
-2,147,483,648 ~ 2,147,483,648

unsigned:
0 ~ 4,294,967,295
double 8byte -4.9e-324~1.7e+308
long 4byte signed:
-2,147,483,648 ~ 2,147,483,648

unsigned:
0 ~ 4,294,967,295
long double 8byte -4.9e-324~1.7e+308
char 1byte signed: 
-128 ~ 128

unsigned:
0~ 255
     

 

 

이상으로 이번 학습을 마치겠습니다.

다음 주에는 변수의 정의, 입력과 출력에 대해 학습해보도록 하겠습니다.