1바이트가 있을때 맨앞의 하나를 제외하면 7bit가 남음, 맨 앞이 0일때는 양수, 1일때는 음수
(어차피 음수까지 표현하면 표현 범위가 절반으로 줄기때문에 상관없음)
양수, 음수를 표현해주는 맨앞의 bit는 MSB라고 함
(most significant bit : 가장 중요한 비트)
0000 0001은 1, 1000 0001은 -1
(하지만 맨앞에 1이 있다고 다 음수가 아님)
뺄셈은 음수의 덧셈임
-10은? 10이랑 더해서 0이 나오는 수가 -10임, -5는? 5랑 더해서 0이 나오는 수가 -5임 <-- 이렇게 접근해야함
unsigned의 경우에는 맨앞이 1이어도 양수로 취급함
근데 signed의 경우에는? 맨앞이 1이면 음수가 됨
unsigned char c = 255; 이든
signed char c = 255; 이든 둘의 bit 상태는 똑같음 (1111 1111)
하지만 앞에 붙은게 다르기 때문에 보여주는 방식만 달라지는거임, -1 또는 255
메모리에 담긴 값은 똑같지만 어떻게 읽어오느냐에 따라 보여지는 값이 다르다는 뜻!
unsigned char c = -1; 로 하면?
1과 더해서 0이 나오는 수는 1111 1111
이걸 10진법 양수로 표현하면 255
1111 1111
이 되는데 1을 더해야 0000 0000
이 되기 때문게임을 처음 서비스 할때는 몬스터 최대체력이 500만, 1000만이어서 int로 했지만?
오래 서비스해서 파워 인플레이션 때문에 최대 체력이 20억이 넘었을때 최대체력 20%증가 버프를 쓰면? (int의 범위는 32비트 42억 / 2
해서 21억 ~~~
임)
그럼 몬스터 체력이 음수가 돼서 즉사하고 게임은 크래시가 남