개요

r 진수 N 에 대해 두 가지의 보수가 있다.

  • r의 보수 (r's complement)
  • r-1의 보수 (r-1's complement)

예를 들면 다음과 같다.

  • 2진수에는 2의 보수와 1의 보수가 있다.
  • 8진수에는 8의 보수와 7의 보수가 있다.
  • 10진수에는 10의 보수와 9의 보수가 있다.

정의

r의 보수와 (r-1)의 보수의 관계

\[\text{r의 보수} = \text{ $(r-1)$의 보수 + 가장 낮은 자리의 $1$ }\]

r의 보수

정수부분이 n개의 자리로 구성된 r진수 N에 대한 r의 보수는 (식2.2)와 같이 정의된다.1

\[\text{$N$에 대한 $r$의 보수} = \begin{cases} r^n - N, & N \ne 0 \\ 0, & N = 0 \\ \end{cases}\]

10진수 예제

10진수 42의 10의 보수를 구해보자.

  • 주어진 숫자는 42 이므로, \(N = 42\).
  • 정수부분은 42. 2개의 자리로 이루어져 있으므로, \(n = 2\) 이다.
  • 10진수 숫자이므로 \(r = 10\).

이를 종합하면 다음과 같다.

\[\begin{align} r^n - N & = 10^2 - 42 \\ & = 58 \\ \end{align}\]

쉽게 계산하려면 42보다 크면서 가장 작은 10의 거듭제곱수인 100에서 42를 빼주면 된다.

즉 \(100 - 42\) 이다.


이번에는 10진수 42.31의 10의 보수를 구해보자.

  • 주어진 숫자는 42.31 이므로, \(N = 42.31\).
  • 정수부분은 42. 2개의 자리로 이루어져 있으므로, \(n = 2\) 이다.
  • 10진수 숫자이므로 \(r = 10\).

이를 종합하면 다음과 같다.

\[\begin{align} r^n - N & = 10^2 - 42.31 \\ & = 57.69 \\ \end{align}\]

2진수 예제

2진수 \(110111_2\)의 2의 보수를 구해보자.

6자리 수이므로 \(2^6 - 110111_2\)를 계산해주면 된다.

\[\begin{align} r^n - N & = 2^6 - 110111_2 \\ & = 1000000_2 - 110111_2 \\ & = 001001_2 \\ & = 1001_2 \\ \end{align}\]

기계적으로는 모든 비트를 뒤집은 다음 1을 더해주면 2의 보수를 쉽게 구할 수 있다.

  • 110111
  • 001000 - 모든 비트 반전 (1의 보수)
  • 001001 - 가장 마지막 자리에 1을 더해준다 (2의 보수)

소수점이 있어도 구하는 방법은 같다.

2진수 \(1101.11_2\)의 2의 보수를 구해보자.

\[\begin{align} r^n - N & = 2^4 - 1101.11_2 \\ & = 10000.00_2 - 1101.11_2 \\ & = 10.01_2 \\ \end{align}\]

기계적으로 구하는 것이 더 쉽다.

  • 1101.11
  • 0010.00 - 모든 비트 반전 (1의 보수)
  • 0010.01 - 가장 마지막 자리에 1을 더해준다 모든 비트 반전 (2의 보수)

r-1의 보수

정수부분이 n개의 자리로 구성되고 소수점 아래가 m개의 자리로 구성된 r진수 N에 대한 (r-1)의 보수는 (식2.3)과 같이 정의된다.1

\[\text{$N$에 대한 $(r-1)$의 보수} = r^n - r^{-m} - N\]

10진수 예제

10진수 42의 9의 보수를 구해보자.

  • 주어진 숫자는 42 이므로, \(N = 42\).
  • 정수부분은 42. 2개의 자리로 이루어져 있으므로, \(n = 2\) 이다.
  • 소수점 아래는 없으므로, \(m = 0\) 이다.
  • 10진수 숫자이므로 \(r = 10\).

이를 종합하면 다음과 같다.

\[\begin{align} r^n - r^{-m} - N & = 10^2 - 10^{-0} - 42 \\ & = 100 \color{red}{- 1} - 42 \\ & = 99 - 42 \\ & = 57 \\ \end{align}\]

\(100 - 1 - 42\) 라는 것을 알 수 있다.

쉽게 계산하려면 42보다 크면서 가장 작은 10의 거듭제곱수인 100에서 1을 빼고 42를 빼주면 된다.

즉 \(99 - 42\) 이다.


이번에는 10진수 42.31의 9의 보수를 구해보자.

  • 주어진 숫자는 42.31 이므로, \(N = 42.31\).
  • 정수부분은 42. 2개의 자리로 이루어져 있으므로, \(n = 2\) 이다.
  • 소수점 아래 .31은 2개의 자리로 이루어져 있으므로, \(m = 2\) 이다.
  • 10진수 숫자이므로 \(r = 10\).

이를 종합하면 다음과 같다.

\[\begin{align} r^n - r^{-m} - N & = 10^2 - 10^{-2} - 42.31 \\ & = 100 - 0.01 - 42.31 \\ & = 100 - 42.32 \\ & = 57.68 \\ \end{align}\]

2진수 예제

2진수 \(110111_2\)의 1의 보수를 구해보자.

6자리 수이므로 \(2^6 - 2^{-0} - 110111_2\)를 계산해주면 된다.

\[\begin{align} r^n - r^{-m} - N & = 2^6 - 1 - 110111_2 \\ & = 1000000_2 - 1 - 110111_2 \\ & = 001000_2 \\ & = 1000_2 \\ \end{align}\]

기계적으로는 모든 비트를 뒤집어 주기만 하면 1의 보수를 쉽게 구할 수 있다.

  • 110111
  • 001000 - 모든 비트 반전 (1의 보수)

소수점이 있어도 구하는 방법은 같다.

2진수 \(1101.11_2\)의 1의 보수를 구해보자.

\[\begin{align} r^n - r^{-m} - N & = 2^4 - 2^{-2} - 1101.11_2 \\ & = 10000.00_2 - 0.01 - 1101.11_2 \\ & = 1111.11_2 - 1101.11_2 \\ & = 10.00_2 \\ \end{align}\]

기계적으로 구하는 것이 더 쉽다.

  • 1101.11
  • 0010.00 - 모든 비트 반전 (1의 보수)

참고문헌

  • [KIM] 디지털논리회로 / 김형근, 손진곤 공저 / 한국방송통신대학교출판문화원 / 3개정판 4쇄 2021년 01월 25일

주석

  1. [KIM] 2.1.2 보수.  2