All about Computer/이론

이진수의 음수표현(1의 보수 방식)

1의 보수 방식(1's complement)

① 일반적으로 컴퓨터는 2진법을 사용하므로 컴퓨터가 사용할 수 있는 보수 방식에는 1의 보수 방식과 2의 보수 방식이 있다.

② 1의 보수 방식은 'X = A + B' 에서 기준치 X를 11111...111(n비트일 경우 1의 개수가 n개만큼 존재)으로 잡은 것이다.

  ㉠ 즉, 4비트를 기준으로 한다면, 1의 보수 방식에서는 1111이 기준이 된다.

  ㉡ 설명의 편의를 위해서 1111을 기준으로 하나 일반적인 경우는 이야기가 약간 다르다.

③ 1의 보수 방식으로 보수 처리를 하는 방법은 보수 표현을 적용할 수의 0을 1로, 1을 0으로만 반전시켜주면 된다.

  ㉠ 예를 들어 0011을 보수 처리하면, 1100이 된다.

④ 위와 같은 방식으로 보수 처리를 하는 이유는 기준 값을 1111에 두었기 때문이다. 따라서 위의 예시를 연장해서 예시를 들면

  ㉠ 1111은 기준치 X에 해당하고, 1100을 A라고 하면 0011은 B가 된다.

  ㉡ 1100을 이항하면 두번째 식이 만들어진다.

  ㉢ 한 비트는 0 또는 1로 이루어져있다.

    ⓐ 따라서 1111..11111에서 0과 1로 된 어떤 수 A를 빼면, 피감수 B는 감수 A에서 0과 1이 서로 반전되는 형태가 나오게 된다. 이는 이진수의 반전(inverting) 특성과 관련있다.

1의 보수와 음수(1's complement and negative numbers)

① 보수와 음수는 무슨 관계가 있는 것일까?

  ㉠ 다음 그림을 보자.

 

    ⓐ 좌변의 -x를 보수처리한 어떠한 수를 X라고 하자.

    ⓑ 0 + (-x) = X = -x가 된다. 따라서 X = -x

     결과적으로 X는 -x를 치환한 셈이 된다.

     즉 기준치가 0이라면, 어떤 수를 보수처리한다는 것은 어떤 음수와 같다는 말이다.

  ㉡ 결국, 보수 방식을 사용하는 이유는 뺄셈을 덧셈의 형태로 계산하기 위해서이다.

③ 1의 보수 방식을 사용하면 부호화 절댓값 방식과 마찬가지로 양의 0과 음의 0이 동시에 존재하는 상황이 발생한다.

  ㉠ 다음 사진을 보자.

    ⓐ 0000 - 0000= 0000이므로, 0000을 보수처리한 1111도 0000과 같은 값이어야 한다. 둘을 구분하기 위해 0000을 양의 0, 1111을 음의 0이라고 한다.

④ 다음 표는 4비트일 때 1의 보수방식으로 나타낼 수 있는 모든 경우의 수를 나타낸 것이다.

⑤ 다음 표는 기준치가 4비트 1111일 때 음수 계산 중 나올 수 있는 상황을 정리한 것이다.

  ㉠ 위의 표들의 계산 결과를 봤을 때 노란색, 갈색, 빨간색으로 나뉜다.

  ㉡ 노란색으로 색칠된 부분은 계산을 수행했을 때 정상인 부분이다.

    ⓐ 아래 그림을 보면 십진수로 계산한 것과 이진수로 계산한 것이 같음을 알 수 있다.

  ㉢ 갈색으로 색칠된 부분은 일반적인 덧셈을 수행했을 때 오류가 생긴 부분이다.

    ⓐ 아래 그림을 보면 십진수로 계산한 것과 이진수로 계산한 것이 다름을 알 수 있다.

    ⓑ 이 경우에는 이진수 결과값에 1을 더해야 십진수 값과 같아짐을 알 수 있다.

    ⓒ 1을 더하는 이유는 십진수에는 -0이라는 개념이 없는데, 1의 보수 방식의 음수표현에 -0이 존재하므로 둘을 일대일대응 시키려면 -0을 제거해줘야하기 때문이다.

  ㉣ 빨간색으로 색칠된 부분은 4비트로 나타낼 수 있는 수의 범위를 벗어난 부분이다.

    ⓐ 4비트로 나타낼 수 있는 수의 범위는 -7~7이다. 따라서 7 초과 또는 -7 미만이 이 경우에 해당한다.

    ⓑ 아래 그림을 보면 십진수로 계산한 것이 4비트로 나타낼 수 있는 범위를 초과했음을 알 수 있다.

    ⓒ 4비트일 때는 이 오류를 해결할 방법이 없다. 하지만 이를 일반화한다면 이 문제가 해결된다.

⑥ 이진수의 1의 보수 계산을 일반화하면 아래와 같다.

  ㉠ 기준치는 1111...111이라고 가정하며, 4비트까지만 나타낸다고 해보자.

    ⓐ 위에서는 -7~7까지만 나타낼 수 있다고 제한했으나, 현재는 나타낼 수 있는 수의 범위 제한이 없다.

    ⓑ 하지만 일반적인 상황에서 굳이 모든 비트를 표시하지 않더라도 적당한 수의 비트를 제외한 비트들을 생략해서 표시하면 된다.

    따라서 4비트에서는 4비트를 초과한 이진값들을 생략하기 때문에 하나의 값이 2개의 값을 갖는 것처럼 보인다.

    ⓓ 예를 들어 -13과 2를 들 수 있다.

생략하는 이유는 4비트만 있으면 충분한데 굳이 4비트를 초과한 비트들을 작성할 이유가 없기 때문이다.

 

  ㉡ 표의 계산에서 문제가 생기는 상황들의 공통점은 최상위 비트에서 캐리가 발생한다는 것이다.

    ⓐ 따라서 최상위 비트에서 캐리가 발생하는 것과 발생하지 않는 경우로 나눌 수 있다.

    ⓑ 일반화시킨 캐리가 발생하는 경우는 다음과 같다.

요약하자면 "합 + 1"이다.

    일반화시킨 캐리가 발생하지 않는 경우는 다음과 같다.

요약하자면 "-(합에 대한 1의 보수)"이다. -(X) = -(-x) = 이므로, 보수에 마이너스를 붙이면 원래 수를 알 수 있다.

⑦ 1을 더해야하는 지 때문에 계산 과정이 상당히 복잡한 것을 알 수 있다.

  ㉠ 따라서 일반적으로 컴퓨터에서는 2의 보수 방식을 사용한다.

⑧ 부호화 절댓값과는 다르게 a - b를 a + (-b)로 계산하기 때문에 가산기(덧셈기)로만 계산하는 것이 가능하다.