보수와 뺄셈의 관계

코린이·2022년 1월 21일

논리연산

목록 보기
1/1

보수란 각 자리의 숫자의 합이 어느 일정한 수가 되게 하는 수를 의미한다.

여기서 말하는 일정한 수가 10이라면 4에 대한 10의 보수는 6이 되고 2에 대한 10의 보수는 8이 된다

R진법에 대한 보수는 R-1의 보수와 R의 보수로 구분할 수 있다.

R-1의 보수


R-1의 보수를 구하는 공식은 아래와 같다.

(Rn1)N(R^n-1) - N

(여기서 N은 구하려는 보수, n은 N의 자리수이다)

예를 들어 10진수 N이 57이면 9의 보수는 100-1-57 ⇒ 42가 된다.

그럼 이진수는 어떨까?

이진수 N이 1010이라면 1의 보수는 1111-1010 = 0101이 된다.

1의 보수를 자세히 관찰하면 아래와 같은 규칙이 있다.

📚 각 자리의 숫자가 0→1 , 1→0으로 바뀐다. 즉, 토글(toggle)이 된다.

컴퓨터에서는 토글을 이용하여 1의 보수를 구하게 된다.

R의 보수


R의 보수를 구하는 공식은 아래와 같다

(Rn1)N+1(R^n-1) - N +1

(여기서 N은 구하려는 보수, n은 N의 자리수이다)

2의 보수의 공식을 보면 1의 보수의 공식에 1을 더한 값인 것을 알 수 있다 (물론 RnNR^n - N으로 구해도 무방하다)

그럼 10진수 N이 57이면 10의 보수는 42가 되고, 이진수 N이 1010이면 2의 보수는 0110이 된다.

보수를 사용하는 이유


보수는 컴퓨터에서 뺄셈을 할 때 사용된다. 그럼 왜 굳이 보수를 이용해서 뺄셈을 하는 것일까?

컴퓨터는 기본적으로 덧셈 연산을 하는 장치만 존재한다. 왜냐하면 덧셈과 보수을 통해 충분히 뺄셈이 가능하기 때

문이다. 이런 상황에서 CPU에 뺄셈 연산 장치를 넣는 것은 쓸데없이 단가만 올리는 일이다.

그럼 보수로 뺄셈을 하는 법을 알아보자.

정수 계산에서의 비트구조


그 전에 비트구조에 대해 알아보자 4비트의 구조를 예로 들겠다.

4비트는 총 4개의 비트로 이루어져 있기때문에 자연수(unsigned)만을 넣게 된다면 0~15까지의 숫자를 넣을 수 있다.

하지만 정수는 다르다. 정수에는 부호가 있다.

그렇기 때문에 정수계산에서는 가장 왼쪽 비트(MSB)는 부호비트(0이면 양수, 1이면 음수)로 사용된다.

결론적으로 아래와 같은 구조가 된다.

📚 MSB는 부호비트, 나머지 비트들은 정수의 값

정수형 4비트는 -8~7(2의 보수 기준)까지의 숫자를 나타낼 수 있다.

2의 보수를 이용한 뺄셈 연산


지금부터 아래 2가지의 뺄셈을 이진법으로 계산 해볼 것이다.

  1. 9 - 3
  2. 4 - 6

1번 풀이

9-3 = 9+(-3)으로 나타낼 수 있기 때문에 9에 -3을 합한 값을 구하면 된다. 그럼 -3은 어떻게 구할까?

2의 보수를 이용하면 된다. 3은 0011(2)인데 2의 보수를 구하면 1101(2)이 된다.

이 1101(2)은 10진수로 -3이 된다.

이 말이 사실인지 확인 해볼려면 3과 -3 즉, 0011과 1101을 더해보면 된다.

📚 0011(2) + 1101(2) = 10000 ⇒ 가장 왼쪽의 올림수(carry) 삭제 ⇒ 0000

결론적으로 0이 되므로 N에 대한 2의 보수 = -N이 성립함을 알 수 있다.

이에 따라 9+(-3)은 1001(2) + 1101(2) = 10110(2)이 된다. 여기서 가장 왼쪽의 올림수(carry)를 지워준다

그럼 0110(2) 10진수로 6이 된다.

2번 풀이

4-6 = 4+(-6)이므로 0100(2) + 1010(2) = 1110(2)이 된다.

두 가지로 나눈 이유

1번의 경우 큰 수에서 작은 수를 뺀 것인데 이때는 항상 가장 왼쪽의 올림수(carry)가 생기게 된다.

여기서 carry를 버리게 되면 부호비트가 0인 양수 값이 나오게 된다.

2번의 경우 작은 수에서 큰 수를 뺀 것이기 때문에 부호비트가 1인 음수가 나오게 된다.

여기서 결과값에 대한 2의 보수를 구한 다음 -부호를 붙여도 똑같은 결과가 된다

(EX. 1110(2) → -0010(2) = -2(10))

마무리


2의 보수말고도 부호의 절댓값, 1의 보수를 이용해도 이진수의 뺄셈이 가능하지만 대부분의 컴퓨터가 2의 보수를 이용하여 뺄셈을 하기 때문에 2의 보수만 다루었다.

profile
호기심이 많고, 문제를 끝까지 해결하려는 집념이 강한 개발자입니다.

0개의 댓글