책너두 (컴퓨터 밑바닥의 비밀) 23일차 CPU는 숫자를 어떻게 인식할까?

  • 컴퓨터 시스템이 2진법인 이유는 컴퓨터의 저수준 계층이 각각 켜고 끄는 스위치인 트랜지스터로 구성되어 있기 때문임.
  • 숫자 0과 양의 정수
  • 0이라는 개념을 표현하기 위해 위치 기수법을 사용하여 값과 숫자의 위치를 표현함.
    • ex) 숫자 5를 2진법으로 표기하면 101(2) 임. → 1 x 2^2 + 0 x 2^1 + 1 x 2^0
  • 비트 k개를 사용하면 정수 2^k개를 나타낼 수 있음.
    • ex) k가 8 비트이면, 표현 가능한 범위는 0~255 임. → 부호 없는 정수에 해당함.
  • 부호 있는 정수
  • 부호 없는 정수를 나타내려면 부호 있는 정수에서 표현 범위를 반으로 나누면 됨.
    • ex) 4비트 부호 없는 정수 → 0~15
    • 부호 있는 정수는 1~7, 그리고 -8~-1 까지 표현할 수 있음.
      • 비트로 표현한다면, 최상위 비트를 정수 부호로 결정하면 됨.
        • 0 → 양수 / 1 → 음수
  • 양수에 음수 기호를 붙이면 바로 대응하는 음수 : 부호-크기 표현
  • 0010이 +2 라면, -2는 최상위 비트만 1로 바꾸기만 한 1010으로 표현할 수 있음.
    • 0000 → 0
    • 0001 → 1
    • 0010 → 2
    • 0011 → 3
    • 0100 → 4
    • 0101 → 5
    • 0110 → 6
    • 0111 → 7
    • 1000 → -0
    • 1001 → -1
    • 1010 → -2
    • 1011 → -3
    • 1100 → -4
    • 1101 → -5
    • 1110 → -6
    • 1111 → -7
  • 근데 1000이 -0으로 표현되는게 이상함.
  • 부호-크기 표현의 반전: 1의 보수
  • 0010이 +2 니까, 이를 완전히 반전시킨 1101 을 -2로 표현하는 생각을 할 수 있음.
    • 0000 → 0
    • 0001 → 1
    • 0010 → 2
    • 0011 → 3
    • 0100 → 4
    • 0101 → 5
    • 0110 → 6
    • 0111 → 7
    • 1000 → -7
    • 1001 → -6
    • 1010 → -5
    • 1011 → -4
    • 1100 → -3
    • 1101 → -2
    • 1110 → -1
    • 1111 → -0
  • 이 방법을 1의 보수라고 함.
    • 그러나 여전히 -0이 있음.
  • 이러한 숫자 표현 방식은 이론상으로 설계가 가능하지만, 실제로 두 숫자를 더할 때 문제가 있었음.
  • 간단하지 않은 두 수 더하기
  • ex) 2 + (-2)
    • 부호-크기 표현 방식에서 2는 0010, -2는 1010임.
    • 이진수 덧셈을 수행하면 1100이 나옴 → 부호-크기 표현 방식에 따르면 -4임. 즉 결과가 모순됨.
    • 1의 보수에서 2는 0010, -2는 1101임.
    • 이진수 덧셈을 수행하면 1111이 나옴 → -0에 해당함. 값이 우하하진 않지만, 모순된 결과는 아님.
  • 컴퓨터의 덧셈은 가산기 조합 회로로 구현됨.
    • 부호-크기 표현이나 1의 보수를 이용하여 덧셈 계산하려면 부호 있는 숫자의 정확한 덧셈을 보장하는 조합 회로를 추가하는 것이 불가피 함.
  • 컴퓨터 친화적 표현 방식: 2의 보수
  • A + (-A) = 0 이면서 0을 표현하는 2진법이 0000 으로 표현하는 방법이 필요함.
  • 0000 → 0
  • 0001 → 1
  • 0010 → 2
  • 0011 → 3
  • 0100 → 4
  • 0101 → 5
  • 0110 → 6
  • 0111 → 7
  • 1000 → -8
  • 1001 → -7
  • 1010 → -6
  • 1011 → -5
  • 1100 → -4
  • 1101 → -3
  • 1110 → -2
  • 1111 → -1
    • 이 표현 방식에는 -0이 없음.
    • -1 (1111)에 1을 더하면 확실히 0000을 얻을 수 있음.
      • 근데, 자리 올림수가 존재함. → 실제론 10000임.
      • 하지만 우리는 자리 올림수를 무시함.
      • 가산기에서 계산을 수행할 때는 숫자 부호에 전혀 신경 쓸 필요가 없음.
  • 이러한 숫자 표현 방식이 바로 현대 컴퓨터 시스템에서 사용되는 2의 보수임.
  • CPU는 정말 숫자를 알고 있을까?
  • 현대 컴퓨터가 2의 보수 표현 방식을 사용하는 근본적 이유는 사람에게는 직관적이지 않지만, 회로 설계를 단순히 할 수 있기 때문임.
  • CPU는 사실 0010이 2인지 이해하지 못함.
    • 단지 두 비트의 배타적 논리합 연산이 덧셈의 결과라는 것과 두 비트의 논리곱 연산이 자리 올림수라는 것만 알고 있음.
  • CPU는 단순한 세포와 같아서 명령을 내리면 실행할 뿐임.
  • 이제 CPU에 입력하는 것이 가능해짐.
    • 출력 역시 사실 0과 1의 연속임.
      • 이 값은 숫자로 인식할 수 도 있고, 문자열로 인식할 수도 있음. RGB 기반 색상으로 인식할 수도 있음.
        • 어떻게 해석하는가는 소프트웨어가 하는 일임.

댓글

Designed by JB FACTORY