| 자료형 | 크기 (byte) | 설명 |
|---|---|---|
char | 1 | 문자형 |
short | 2 | 작은 정수형 |
int | 4 | 기본 정수형 |
long | 4 | 큰 정수형 |
long long | 8 | 매우 큰 정수형 |
float | 4 | 단정도 실수형 |
double | 8 | 배정도 실수형 |
1 byte = 8 bit1 KB = 1024 byte1 MB = 1024 KB1 GB = 1024 MB1 TB = 1024 GBunsigned char): 0 ~ 255signed char): -128 ~ 1272 = 00000010
-2 = 11111110 // (비트 반전 후 +1)
같은 값도 자료형에 따라 다르게 해석됨.
unsigned char c = 255; // 255로 해석
signed char c = 255; // -1로 해석
자료형은 사용할 데이터의 형태를 설명하는 것. == Data Type
어떤 형태의 자료인지 명시하는 것.
int i = 0;
// int : 자료형
// i : 변수의 이름
/*
정수형 int 자료를 i라고 정의했다.
4 byte 크기의 정수형 자료를 만들었다.
*/
char, short, int, long, long long
같은 정수형인데 왜이리 많나? -> 사이즈가 다름
| 자료형 | 크기 (단위 : byte) |
|---|---|
| char | 1 |
| short | 2 |
| int | 4 |
| long | 4 |
| long long | 8 |
float, double
| 자료형 | 크기 (단위 : byte) |
|---|---|
| float | 4 |
| double | 8 |
210 byte == 1024 byte == 1 KB
1024 KB == 1 MB
1024 MB == 1 GB
1024 GB == 1 TB
1 TB == 240 byte
1 byte로 할 수 있는 것?
// 1 byte => 넣을 수 있는 수의 범위
// 0과 양수만 표현할 때 : 0 ~ 255
// 음수를 제외하고 양수까지 표현할 때 붙이는 키워드 unsigned
unsigned char c = 0;
c = 255; // 양수만 표현할 때, 1 byte가 가질 수 있는 최댓값
c = 256; // Q1. 어떻게 될까?
c = -1; // Q2. 어떻게 될까?
1111 1111 (255) + 0000 0001 (1)1 0000 0000 unsigned char c = 256;signed char ch = 0;
char ch; 형태로 작성.signed char 자료형의 8 bit 중 첫번째 bit를 음수, 양수 판단에 사용.0:000 0000 (0)
...
0:111 1111 (127)
0:000 0000 양수 표현 (2^7 == 128개)
1:000 0000 음수 표현 (2^7 == 128개)
이런 식으로 음수, 양수를 나누는데 쓰인 첫번째 bit를
가장 중요한 비트(MSB: Most Significant Bit), 최상위 비트라고 표현
1은 0000 0001으로 표현함.
-1의 표현은 1000 0001일까?
0000 0001 (1)
0000 0010 (2)
= 0000 0011 (3)
0000 0001
1010 0011
= 1010 0100
5 - 4 = 15 + (-4)10 + x == 0 : 10과 더해서 0이 나오는 수가 -10127 == 0111 1111
127과 더해서 0이 나오는 수가 -127
0111 1111
+ 1000 0001
= 1 0000 0000
덧셈으로 자릿수를 넘김.
1 byte는 8 bit의 크기이므로 0000 0000 (0)만 취함.
그러므로 -127은 1000 0001로 표현.
1 == 0000 0001
1과 더해서 0이 나오는 수가 -1
0000 0001
+ 1111 1111
= 1 0000 0000
8 bit만 취하여 -1은 1111 1111로 표현
char 의 범위 : -128 ~ 127unsigned에서 255는 1111 1111로 표현
signed에 1111 1111 값이 들어간 것.
앞선 계산에서 signed는 1111 1111를 -1로 취급.
char ch = 255; // -1
char c1 = 0;
c1 = 255; // 어떻게 될까?
unsigned char c2 = 0;
c2 = 255; // 어떻게 될까?
c1의 표현 범위 -128 ~ 127
255 : 1111 1111
c1 = 1111 1111;
음수를 표현하는 자료형이므로 값은 -1로 처리
c2의 표현 범위 0 ~ 255
255 : 1111 1111
c2 = 1111 1111;
0과 양수를 표현하는 자료형이므로 값은 255로 처리
c2의 표현 범위 0 ~ 255
signed에서 -1 : 1111 1111로 표현
c2 = 1111 1111;
0~255를 표현하는 자료형이므로 값은 255로 처리
동일한 메모리 크기 공간에 동일한 값이 들어가더라도
이 값을 어떻게 처리할지, 해석할지는 관점에 따라 전혀 다른 의미로 표현할 수 있는 것.이것이 포인터의 기반 이해로 이어질 것
2 = 0000 0010
-2 구하기
0000 0010
=> 1111 1101 : 2의 비트를 반전
=> 0000 0001 : 1의 값을 더함.
=> 1111 1110
0000 0010
+ 1111 1110
= 1111 1120
=> 1 0000 0000
자료형 선택 이유
자신이 사용할, 필요한만큼의 범위를 표현할 수 있는 자료형을 선택해야함.
int 형으로 체력을 선언해뒀음.
초기 출시에는 200~300의 데미지를 주거나했음.
근데, 오래된 이후에 버프 등으로 값이 양수 int의 최댓값을 넘어가서
오히려 음수가 된 문제가 발생.
이를 해결하기 위해서 시스템상으로 데미지, 체력 등을 스케일을 줄이거나
long long 과 같이 더 큰 사이즈의 형태로 바꾸는 등의 수정이 필요함.