보수 (Complement)
개요
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일