2. 컴퓨터의 음수 표현

P4·2023년 6월 9일
0
post-thumbnail

음수의 경우는?

  • 1바이트가 있을때 맨앞의 하나를 제외하면 7bit가 남음, 맨 앞이 0일때는 양수, 1일때는 음수
    (어차피 음수까지 표현하면 표현 범위가 절반으로 줄기때문에 상관없음)

  • 양수, 음수를 표현해주는 맨앞의 bit는 MSB라고 함
    (most significant bit : 가장 중요한 비트)

  • 0000 0001은 1, 1000 0001은 -1
    (하지만 맨앞에 1이 있다고 다 음수가 아님)


컴퓨터가 음수를 다루는법

  • 뺄셈은 음수의 덧셈임

  • -10은? 10이랑 더해서 0이 나오는 수가 -10임, -5는? 5랑 더해서 0이 나오는 수가 -5임 <-- 이렇게 접근해야함



예시

  • 0111 1111 <-- 127
  • 1000 0001 <-- -127 (음수니까 맨 앞은 0이고, 더해서 0이 나와야 하니까 10000001)


예시 2

  • 0000 0001 <-- 1
  • 1111 1111 <-- -1? 맞는지 확인 <-- 맞다!


해설

  • 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


보수법

  • 각 bit를 다 뒤집고 +1 <-- 여기서 +1을 해주는 이유는 보수와 그냥 수를 더하면 전부 다 1111 1111 이 되는데 1을 더해야 0000 0000이 되기 때문

자료형의 중요성

  • 게임을 처음 서비스 할때는 몬스터 최대체력이 500만, 1000만이어서 int로 했지만?

  • 오래 서비스해서 파워 인플레이션 때문에 최대 체력이 20억이 넘었을때 최대체력 20%증가 버프를 쓰면? (int의 범위는 32비트 42억 / 2 해서 21억 ~~~ 임)

  • 그럼 몬스터 체력이 음수가 돼서 즉사하고 게임은 크래시가 남

profile
지식을 담습니다.

0개의 댓글