비전공자 공부일기/:: Computer Science

[전산기초] 보수 Complement = 보충하는 수!

와니_ 2021. 7. 12. 23:31

보수

'보정해주는 수' 라는 뜻으로, 같은 자릿수에서 가장 큰 값이 되기 위해 필요한 수(R-1의 보수) 혹은 자릿수를 한 자리 늘리기 위해 필요한 수(R의 보수)를 뜻한다.

 

- 컴퓨터가 기본적으로 수행하는 덧셈 연산을 이용하여 뺄셈을 수행하기 위해 사용

- N + N' = r 일 때 N'를 N에 대한 r의 보수라고 한다

- r진법에는 r의 보수와 r-1의 보수가 존재

  --> 10진법에는 10의 보수와 9의 보수가, 2진법에는 2의 보수와 1의 보수가 있다

 

라고 하면 뭔 말인지 나도 모르겠으니까 쓰는 보충 설명

우리에게 익숙한 10진수의 경우 절대값 8의 양수는 8, 음수는 -8 이런 식으로 쉽게 구할 수 있다.

그런데 2진수를 쓰는 컴퓨터는 음수를 구하기가 쉽지 않다. 1101(2) 의 음수는 -1101(2)가 아니라는 뜻!

양수와 음수의 특징은, 둘을 더하면 0이 된다는 점이다.

이 점을 이진법에도 이용해서 양수 n에 더했을 때 0이 나오면 음수라고 간주하기로 하고,

각 자릿값의 0<-->1을 변환한 값을 보수라고 하기로 하는 것이다.  ** 0<--->1 이므로 NOT Gate 이용

 

그런데 여기에 추가적으로 1의 보수와 2의 보수라는 개념이 있다.

1의 보수(1'Complement)는 주어진 각 자릿값을 0일 때는 1로, 1일 때는 0으로 변환한다.

2의 보수(2'Complement)는 1의 보수를 구한 뒤 결과값에 1을 더한다.

 

그 이유는 가장 왼쪽에 위치하는 비트를 최고값을 갖는다 하여 MSB(Most Significant Bit; 최상위비트)라고 하는데

1의 보수에서는 MSB가 0이 된다. MSB가 0이라는 말은 양수라는 뜻이므로, 개념에 위반된다.

따라서 앞의 값에 +1을 해주는, '2의 보수'라는 개념을 쓰는 것이다.

 

* TIP *

2의 보수를 구하는 좀 더 쉬운 방법은,

최하위(맨 오른쪽) 위치에서 왼쪽 방향으로 첫 번째 1이 나올 때까지는 그냥 쓰고 나머지는 반대로 쓰는 것이다.

 

ex) 1 0 1 0 1 1 0 0의 2의 보수 --> 반대로 씀 0 1 0 1 0  1 0 0 그대로 씀