note title

보수 표현 이란?

컴퓨터는 기본적으로 0과 1, 즉 2진수로만 이해한다. 양수는 2진수로 쉽게 저장할 수 있지만, 음수는 2진수로 표현하기가 까다롭다. 이러한 문제를 해결하기 위해 보수 표현이 등장했다.

왜 보수 표현이 필요할까

컴퓨터는 덧셈은 쉽게 처리할 수 있다. 하지만 뺄셈을 설계하려면 복잡한 회로가 필요하다. 따라서 차라리 컴퓨터에 “뺄셈”도 “덧셈”으로 계산할 수 있게 한 것이 바로 보수 표현법이다. 예를 들면 A-BA+(-B)인 것이다.

보수 표현의 종류

보수 표현은 크게 2가지 방법인데, 1의 보수 혹은 2의 보수이다.

  • 1의 보수: 모든 비트를 반전 (01, 10)으로 바꾸는 방법
  • 2의 보수: 1의 보수를 만든 뒤, 거기에 1을 추가하는 방법

현재 모든 컴퓨터는 거의 2의 보수를 사용한다.

2의 보수

2의 보수는 다음의 순차로 진행된다.

  1. 양수의 2진수 표현으로 바꾼다
  2. 01, 10으로 반전한다. (여기 까지 1의 보수)
  3. 그 결과에 1을 더한다. (여기 까지 2의 보수)

수식으로 본다면 다음과 같다.
+5를 8bit로 표현하면 0000 0101이다. 이 숫자를 -5로 만들기 위한다면

  1. 비트를 반전 1111 1010
  2. 1을 더함 (2의 보수) 1111 1011

2의 보수를 쓰는 이유는 다음과 같은데,

  • 0은 단 하나의 0000 0000으로 만 표현할 수 있다.
  • 덧셈 회로 하나로 덧셈과 뺄셈을 모두 처리할 수 있다.
  • 부호 비트 (MSB)를 통해 양수/음수를 쉽게 구분할 수 있다.
  • 오버플로우 처리가 쉽다.

그렇다면 뺄셈은 어떻게 하는가

위에서 언급한 것과 마찬가지로, 컴퓨터는 뺄셈이 아닌 A+(-B)로 한다. 예시로 알아보면 다음과 같다.

Q: 7-5

  1. 7 = 0000 0111
  2. -5 = 1111 1011 (2의 보수 법)
  3. 더하면, = 0000 0010 (2의 보수 법칙에 의거, 올림수는 버린다)
  4. 0000 0010은 2이므로, 7-5=2 계산식이 성립된다.

보수 표현이 중요한 이유는

컴퓨터가 내부적으로 수를 계산할 때 어떻게 동작하는지 이해할 수 있다는 장점이 있으며, 음수 범위 혹은 오버플로우 에러 등을 이해하는데 필요로 하는 선행 지식이기 때문이다. 특히 시스템 프로그래밍, 임베디드 프로그래밍 등에 많이 사용되므로, 알아두는게 좋다!




참고자료