All about Computer/이론

9의 보수 방식, 10의 보수 방식

9의 보수 방식과 10의 보수 방식의 개념

 마이너스 기호(-)를 붙이지 않고 음수를 표현할 수 있는 방법이 존재한다.

  ㉠ 음수를 표현하기 전에 정수는 양의 정수, 0, 음의 정수로 이루어져있다는 것을 생각해보자.

    ⓐ 0을 말 그대로 0으로 취급할 것인지, 아니면 양의 정수 혹은, 음의 정수의 일부로 포함시킬 건지를 고려해야한다.

 음수를 나타내는 방법으로 보수를 이용하는 방법이 있다.

  ㉠ 보수는 아래의 네이버 사전에 명시된 것처럼, 각 자리의 숫자의 합이 어느 일정한 수가 되게 하는 수이다.

    ⓐ A + B = C라면 C의 A에 대한 보수는 B이다.

  ㉡ 보수를 사용하는 근본적인 이유는 이진수의 뺄셈을 덧셈 과정으로 계산해 경제적 효율성을 높이기 위해서이다.

    ⓐ 뺼셈과 덧셈을 두 가지의 구분되는 과정으로 만드는 것보다 한 가지의 과정으로 통일시키는 게 경제적으로 이익이다.

    ⓑ 십진수로 보수를 표현할 때는 한 자리에 들어가는 경우의 수가 10가지나 되어 보수 계산의 이점을 충분히 활용할 수 없다.

    ⓒ 반면, 이진수는 한 자리에 0 또는 1만 존재하기 때문에 보수 계산에서는 굉장히 유리하다.

    ⓓ 그 이유는 이진수는 각 자릿수가 0과 1만으로 표현되므로, 양수 아니면 음수라는 개념과 0과 1이 수적으로 대응된다.

    그러나 십진수는 각 자릿수가 0~9의 수로 표현되므로, 이진수만의 특성인 토글(toggle)이라는 개념과 일대일 대응하지 않기에 상대적으로 불리하다.

③ 십진수는 각 자리에 0부터 9까지의 수가 들어갈 수 있으므로 두 자릿수로 표현할 수 있는 경우의 수는 10x10 = 100 가지이다.

  ㉠ 십진수에서 보수를 나타내는 방식은 9의 보수 방식과 10의 보수 방식이 있다.

     9의 보수 방식은 0을 양의 0과 음의 0으로 표현해 양의 정수와 음의 정수의 개수를 동일하게 하는 방식이다.

     10의 보수 방식은 0을 0으로 취급하며, 음의 0이 존재하지 않기 때문에 음의 정수의 폭이 더 넓다.

n은 자릿수

 

④ 특정 수와 그 수의 보수를 더했을 때 그 특정값은 0을 의미해야 한다.

  ㉠ 이 때 특정 값은 9의 보수 방식일 때는 10^n-1, 10의 보수 방식일 때는 10^n이다.(n은 자릿수이다.)

   9의 보수 방식일 때 10^n - 1은 음의 영(-0)을 의미하며, 양의 영과 보수 관계이다.

  ㉢ 10의 보수 방식에서는 10^n은 n+1 자리이기 때문에  오버플로가 일어나 0이 된다.

    ⓐ 최대자릿수를 넘어간다면, 넘어간 자리의 숫자는 무시하는데 이를 오버플로(Overflow)되었다고 한다. 

    ⓑ 10의 보수 방식에서 음의 영 대신 음수를 한 개로 바꿨기 때문에 음수 마지막 수에 대응되는 보수 관계가 없다.

보수 방식을 이용한 뺄셈의 원리

① 2개의 비커와 물을 이용해 뺄셈을 할 수 있다.

  ㉠ 큰 비커의 바닥에 흘린 물에 대한 보수는 큰 비커 안에 있는 물이다.

  ㉡ 큰 비커의 바닥에 흘린 물에 대한 보수는 작은 비커 안에 있는 물이다.

9의 보수 방식을 이용한 뺄셈의 계산 과정

① 우선 최대자릿수를 정해야 한다. 뺄셈에는 감수(빼는 수)와 피감수(빼지는 수)가 존재하므로, 둘을 비교해서 최대자릿수를 결정해야 한다.

  ㉠ 최대자릿수의 기준은 감수와 피감수의 자릿수에 있다. 즉, a - b라고 한다면, 최대자릿수는 a와 b 중 더 큰 수와 자릿수가 같다.

    ⓐ 예를 들어 3 - 12의 경우 12가 더 크다. 12는 두 자리이므로, 최대자릿수는 2이다.

    ⓑ 예를 들어 12 - 4의 경우 12가 더 크다. 12는 두 자리이므로, 최대자릿수는 2이다.

  ㉡ 기준 값은 최대자릿수와 같은 자릿수를 가진 수 중 최댓값이다.

  ㉢ 기준값은 10^n-1와 같다.(n은 최대자릿수)

     3 - 12에서 최대자릿수는 2이다. 이 때, 최댓값은 99이다.

    ⓑ 12 - 4에서 최대자릿수는 2이다. 이 때, 최댓값은 99이다.

② 두 번째로, 감수를 보수처리한다.

  ㉠ 12를 보수처리하면 87이 된다.

  ㉡ 4를 보수처리하면 95가 된다.

③ 피감수와 보수 처리된 감수를 더한다.

  ㉠ 3 + 87 = 90

  ㉡ 12 + 95 = 107

④ 만약 합이 최대자릿수를 넘어가지 않는다면, 합을 보수처리한 것의 음수값이 결과이다.

  ㉠ 90은 최대자릿수가 2이므로 이를 보수처리한 수는 9이고, 여기에 마이너스를 붙이면 -9가 된다.

⑤ 최대자릿수를 넘어간다면, 넘어간 자리의 숫자는 무시한다. 이를 오버플로되었다고 한다. 무시한 후, 결과값에 1을 더한다.

   107 은 최대자릿수를 넘어갔으므로, 오버플로가된 수는 무시하고, 7에 1을 더하면 8이 된다.

D가 기준값을 넘지 않는 경우
D가 기준값을 넘어 오버플로가 일어난 경우

10의 보수 방식을 이용한 뺄셈의 계산 과정

① 우선 최대자릿수를 정해야 한다. 뺄셈에는 감수(빼는 수)와 피감수(빼지는 수)가 존재하므로, 둘을 비교해서 최대자릿수를 결정해야 한다.

  ㉠ 최대자릿수의 기준은 감수와 피감수의 자릿수에 있다. 즉, a - b라고 한다면, 최대자릿수는 a와 b 중 더 큰 수와 자릿수가 같다.

    ⓐ 예를 들어 3 - 12의 경우 12가 더 크다. 12는 두 자리이므로, 최대자릿수는 2이다.

    ⓑ 예를 들어 12 - 4의 경우 12가 더 크다. 12는 두 자리이므로, 최대자릿수는 2이다.

  ㉡ 기준 값은 최대자릿수와 같은 자릿수를 가진 수 중 최댓값이다.

  ㉢ 기준값은 10^n와 같다.(n은 최대자릿수)

     3 - 12에서 최대자릿수는 2이다. 이 때, 최댓값은 100이다.

    ⓑ 12 - 4에서 최대자릿수는 2이다. 이 때, 최댓값은 100이다.

② 두 번째로, 감수를 보수처리한다.

  ㉠ 12를 보수처리하면 88이 된다.

  ㉡ 4를 보수처리하면 96가 된다.

③ 피감수와 보수 처리된 감수를 더한다.

  ㉠ 3 + 88 = 91

  ㉡ 12 + 96 = 108

④ 만약 합이 최대자릿수를 넘어가지 않는다면, 합을 보수처리한 것의 음수값이 결과이다.

  ㉠ 91은 최대자릿수가 2이므로 이를 보수처리한 수는 9이고, 여기에 마이너스를 붙이면 -9가 된다.

⑤ 최대자릿수를 넘어간다면, 넘어간 자리의 숫자는 무시한다. 이를 오버플로되었다고 한다.

  108 은 최대자릿수를 넘어갔으므로, 오버플로가된 수는 무시하면 8이 된다.

D가 기준값을 넘지 않은 경우
D가 기준값을 넘어 오버플로가 일어난 경우

⑥ 과정이 다소 복잡해 보인다. 뺄셈을 덧셈으로 계산하려 하는데, 보수를 구하는 과정에서 뺄셈을 하는 모순 현상이 생긴다.

  ㉠ 그러나 이는 십진수이고, 십진수에는 토글(toggle) 특성이 존재하지 않기 때문에 복잡해보인다.

  ㉡ 이진수의 경우 0과 1밖에 없기 때문에 토글 특성을 활용한다면 계산 결과를 간단하게 구할 수 있다.

  ㉢ 계산 과정이 복잡해 보이는 이유는 D가 어떤 수를 의미하는지 구하려고 하기 때문이다. D 상태는 어떤 수가 치환된 상태이므로 D 상태를 이용한다면 그리 복잡하지 않다.