Datatype(자료형)은 변수라는 메모리 공간의 이름을 설계하는 설계도이다.
그 변수의 공간의 크기나 어떠한 값을 저장할지를 결정하는 단어가 바로 Datatype(자료형)이다.
1bit는 컴퓨터 용량의 가장 작은 단위이다.
1byte는 8bit이다. 1byte = 8bit
여기서 여러 가지 Datatype(자료형)에 알아보자!
부호 비트 | 2 ^ 6 | 2 ^ 5 | 2 ^ 4 | 2 ^ 3 | 2 ^ 2 | 2 ^ 1 | 2 ^ 0 |
0(양수) | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
1(음수) | 1 | 1 | 1 | 1 | 1 | 1 | 1 |
자료형의 크기는 1byte가 최소인데 1byte는 8개의 bit가 들어가 있으므로 2 ^ 8로 해서 256개이다.
그런데 비트에는 부호 비트가 있고 맨 앞자리의 비트가 부호 비트이며 부호 비트가 1이면 음수이고 0이면 양수이다.
그래서 1byte가 256개인 이유는 음의 영역과 양의 영역의 bit를 합하면 (- 128부터 0을 포함한 127까지 해서) 256개이다.
종류 | 자료형 | 메모리 크기 | 값의 범위 |
정수형 변수 | char | 1byte | -128 ~ 127 (2 ^ 8) |
short | 2byte | -32768 ~ 32767 (2 ^ 16) | |
int | 4byte | -2,147,483,648 ~ 2,147,483,647 (2 ^ 32) | |
unsigned int | 4byte | 0 ~ 4,294,967,295 (2 ^ 32) | |
long long int | 8byte | -9,223,372,036,854,775,808 ~ 9,223,372,036,854,775,807 (2 ^ 64) |
|
실수형 변수 | float | 4byte | 3.4 * 10 ^ -37 ~ 3.4 * 10 ^ 38(실수) |
double | 8byte | 1.7 * 10 ^ -307 ~ 3.4 * 10 ^ 308 (실수) |
int main()
{
int num1;
num = 10000000000; // 100억
printf("과연 얼마의 숫자가 나올까 ? %d ", num1);
}
그래서 int라는 설계도로 num1이라는 변수 메모리 공간에 100억을 담게 된다면 어떻게 될까?
100억은 int라는 설계도 범위 밖의 숫자이다. 그래서 에러가 나거나 100억이 나오지 않고 적은 수가 나오게 된다.
그렇다면 100억을 담기 위해선 어떠한 자료형을 써야 할까?
int main()
{
long long int num1;
num = 10000000000; // 100억
printf("이번엔 잘 나올까? %d " , num1);
}
int를 좀 더 많이 담을 수 있는 long long int에 담게 된다면 충분히 담기고도 남는다.
int number2 = 1;
int number3 = 500;
int number4 = 30000;
지금 위의 코드는 -2,147,483,648 ~ 2,147,483,647 만큼의 값을 저장할 수 있는 int형으로 변수 공간이 생성되었는데
1, 500, 30000의 정수를 저장하고 있다.
그렇다면 number2, 3, 4를 효율적으로 메모리 공간을 사용할 수는 없을까?
char number2 = 1;
short number3 = 500;
short number4 = 30000;
있다. 이것이 효율적인 메모리 공간 활용에 대한 자료형의 중요성이다.
하지만, int 라는 자료형을 왜 더 많이 쓸까?
그 이유는 Data 접근 속도가 빠르기 때문에 int라는 자료형을 쓴다.
C 언어에서 int형의 접근 속도는 일반적으로 빠르다.
int형은 C의 내장 데이터 유형이고 일반적으로 코드가 실행되는
시스템의 아키텍처에 따라 32비트 또는 64비트 정수로 구현되기 때문이다.
int변수에 액세스하려면 일반적으로 단일 기계 명령이 필요하므로 빠른 작업이다.
또한 int 변수는 일반적으로 사용 가능한 가장 빠른 메모리 위치인 CPU 레지스터에 저장된다.
즉 int형은 변수에 액세스하는 속도는 C 컴파일러의 특정 구현과 실행 중인 하드웨어에 따라 달라질 수 있다.
예를 들어 메모리와 처리 능력이 제한된 마이크로컨트롤러에서는
고급 데스크탑 컴퓨터보다 int 변수에 액세스하는 것이 더 느릴 수 있습니다.
float num1 = 3.14;
int num2 = 3.14;
printf("num1 : %f",num1); // 3.140000
printf("num2 : %f",num2); // 0.000000
printf("num2 : %d",num2); // 3
그리고 int 자료형(정수)에 실수 데이터를 대입하게 된다면 소수점 부분을 제외한 실수 부분(정수)만 저장하게 된다.
%f는 서식 문자로 실수 데이터만 출력한다. 그런데 정수 데이터를 넘겨주게 된다면 0을 출력한다.
unsigned int myInt = 1;
int myInt2 = -1;
Datatype(자료형) unsigned는 해당 자료형의 음수 부분을 떼어 양수 부분을 더 저장할 수 있게 만드는 자료형
unsigned 사용 방법은 Datatype에 unsigned를 적어주면 된다.
char myChar2 = 'AB';
printf(myChar2 : %c\n", myChar2);
char Datatype은 문자 하나를 저장할 수 있는 Datatype이다. 작은 다옴표(' ')를 사용한다.
%c는 서식 문자로 문자 데이터 하나를 받아 출력해주는 기능을 담당한다.
'c' 카테고리의 다른 글
06_입력(Input) (0) | 2023.03.21 |
---|---|
05_연산자(Operator) (0) | 2023.03.18 |
04_Literal (0) | 2023.03.15 |
02_변수(Variable) (2) | 2023.03.08 |
01_출력(Output) (0) | 2023.03.04 |
댓글