자료형이란? 모든 자료들의 형식을 정하는 것.

 

자세히 말하자면 자료형은 메모리에서 어떤 종류의 데이터인지 알려주는 일종의 장치이다.

 


보기전에 알아야 할 것!


컴퓨터의 부호 표현 방법

 

사람이 음수를 표현하는 방법은 - 기호를 이용하는 것이다.

-1 처럼 기호가 붙어있으면 음수라고 생각하게 된다.

 

하지만 컴퓨터는 숫자를 이용하기에 부호를 이해하기에 어려울 뿐더러, 이해하더라도 복잡할수가 있다.

 

 

컴퓨터가 기호 없이 부호를 표현하는 방법은 바로부호비트를 이용하는 것이다.

 

부호비트란 , 데이터 비트의 가장 앞 1자리를 1 은 -음수 0은 양수로 표현하여 사용한다.  

 

하지만, 가장 앞 비트를 부호비트로 사용하는 만큼 넣을 수 있는 최대 데이터의 크기는 작아지는 불편함이 있다.

 

출처: 코딩도장 https://dojang.io/


 

unsigned 와 signed는 부호비트 사용여부를 결정한다.

 

 

C 언어에서 변수 앞에 써서 사용되는 것으로 , 아래와 같이 사용한다.

 

 unsigned int A;    /     int B;

 

자료형 앞에 선언하는게 있고, 아닌 것이 있는데, signed 는 defalut 이기 때문에 따로 안써줘도 사용이 가능하드아.

 

unsigned 는 부호비트를 사용하지 않겠다는 뜻으로 

 

오직 양수만 저장할 수 있게 되는 대신, 저장할수있는 데이터 크기가 1비트만큼 커진다.

 

부호 비트 사용할 때  : 1 / 111 1111  ==  -127

부호 비트 사용하지 않을 때 : 1111 1111  ==  255

 

 

 

 

 

 

 


자료형의 종류


자료형은 정수형실수형으로 나뉜다.

 

소숫점이 존재하지 않는 정수형,

소숫점이 존재하는 실수형.

 


정수형의 종류 


정수형의 종류는  5가지가 존재한다. 

 

char 형 /  int 형 / short 형 / long 형 / long long 형 

 


char 형은 1byte 

int 형은 4byte

short 형은 2 byte 

long 형은 4 byte

long long 형은 8byte

 


실수형의 종류


실수형의 종류는 3가지가 존재한다.

 

float 형 / double 형 / long double 형

 


float 형은 4byte

double 형은 8byte

long double 형은 8byte or 그 이상 


 

 

포인터 변수의 크기


포인터 변수의 자료형은 4byte or 8byte 로 나뉘게 된다.

 

이유는 포인터는 변수의 주솟값을 가지는 것이기 때문에, 주솟값의 크기가 얼마냐에 따라 자료형의 크기가 나뉜다.

주솟값은 해당 변수의 자료값과 상관없이 크기가 일정하다. 

 

단, 운영체제가 32bit 냐 64bit 냐에 따라 4byte , 8byte 로 나뉘게 된다.

 


 

 

sizeof() 


sizefo 는 변수의 자료형의 크기를 가져오는 연산이다. 

 

int a; 를 sizeof 에 넣었을 때 int 의 크기인 4를 unsigned long 형으로 반환하게 된다.

sizeof(a) == 4 

 

** unsigned 인 이유는 자료형의 크기가 0 보다 작은 경우는 없기때문이다. 

** long 인 이유는 모르겠다.. 더 찾아봐야 할 듯 

 


 

 

배열 자료형


자료형은 본래, 메모리에서 얼마만큼을 읽어와야하는지 알려주는 장치로, 얼만큼이 해당 변수의 데이터인지 알려준다. 

 

여러개의 변수를 선언하는 것은 연속적으로 선언한다 해도 메모리에 한줄로 저장되는 것이 아니다.

배열은  메모리 안에서 봤을 때 메모리에 한줄로 저장되게 된다. 

 

앞서 자료형의 본래 역할은 메모리에서 얼마만큼을 읽어와야 하는지 알려주는 장치라고 설명을 했다.

자세히 생각 해 보면, 배열은 한줄로 쭉 이어져 있으므로 얼마만큼을 읽어하는지가 어떻게 선언해야하는지가 다 다르게 된다.

 

int a[1] 은 int 4byte 하나의 공간을 메모리에서 읽어오지만,

int b[2] 일 경우에는, int 4byte씩 2개의 공간이 생겨서, 총 8byte를 메모리에서 읽어와야 한다.

 

따라서 두 배열의 자료형은 다르다고 볼 수 있는 것이다.

 

ex) int a[1] != int b[2] 두 배열의 자료형은 다르다.

 

** 자료형이 다른게 아니고, 자료형의 크기가 다른 것이 아닐까?

 

 


배열의 비밀 : src

 

틀린 곳이 있다면 알려주세요.!

'C 언어 문제' 카테고리의 다른 글

C 언어 unsigned 와 signed 의 차이  (0) 2022.01.02
포인터 변수와 %p주소 형식 지정자 with 배열  (0) 2022.01.01
구조체  (0) 2021.06.09
배열  (0) 2021.06.02

+ Recent posts