본문 바로가기

Embedded Programming/컴구조&운영체제

컴퓨터의 음수 표현법(보수법, 컴퓨터 뺄셈 연산의 원리)


 컴퓨터는 이진수만 이해할 수 있다. 그렇다면 음수는 어떻게 표현되는 것인가?
이에 대해서는 두 가지 방법이 고안되었는데, 부호비트 방식과 보수법을 이용한 방식 두가지가 있다.

① 부호비트방식
 이는 최상위 비트(Most Significant Bit)를 부호표기를 위해 남겨두는 방식이다.
예를 들어 8 bit 자료의 경우에는 양수 1은 0000 0001, 음수는 1000 0001으로 표현하는 방식이다.

 하지만, 이는 +0과 -0이라고 0이 두 개 존재하는 문제가 있고, 양수와 음수간의 연산이 어렵다는 단점이 있어 실수(float, double)방식의 표현에만 쓰인다.

② 2의 보수법 방식
 보수(補數)는 각 자리의 숫자의 합이 어느 일정한 수가 되게 하는 수이다. - 위키백과 
 
 각 진법의 보수에는 같은 수의 보수법과 같은 수 -1의 보수법이 존재한다.
예를 들자면 10진수에선 10의 보수법과 9의 보수법이 존재하는 것이다.

십진수 7의 10의 보수는 7과 어떤 수를 합했을 때 10이 되어야 하므로,
7 + x = 10, 즉 x는 3이 된다.

십진수 7의 9의 보수는 7 + x = 9가 되어야 하므로 2가 된다.

위 둘의 관계를 볼 때 10진수의 10의 보수는 9의 보수 + 1 과 같다는 것을 알 수 있다.

컴퓨터는 2진수를 사용하므로  2의 보수법과 1의 보수법이 존재한다.

이진수의 보수법은 아주 간편한데, 우선 1의 보수법을 알아보겠다.
이진수 1111 1011의 1의 보수는 그냥 반대로 뒤집은 수라 생각하면 편하다.
즉, 0000 0100 이 되는 것이다.
여기서 2의 보수를 구하려면 +1 만 시켜주면 되므로 0000 0101이 된다.

그런데 여기서 신기한 것이 1111 1011과 이 숫자의 2의 보수를 덧셈을 해주면 다음과 같은 결과를 확인할 수 있다.

   1111  1011
 + 0000  0101 
 1 0000  0000

최상위 1만 제외하면 0이 되는 것이다!

위의 1111 1011를 담을 수 있는 크기를 8 bit로 한정한다면, 제일 높은 자리수 1을 버림으로서 뺄셈 연산을 
할 수 있다는 것이다.

이진수 1111 1011은 십진수로 바꿨을 때 251이 되고 0000 0101은 5가 되는데...
이런 원리를 이용하면 2의 보수법으로 구한 수와 덧셈 연산을 함으로써 뺄셈 연산을 할 수 있게 된다.

즉 251을 -5로 인식하도록 만드는 것이다.

8 bit가 표현할 수 있는 숫자의 범위는 0~255가 되는데, 그 반인 127에서 잘라 128부터는 거꾸로 음수-128 로 표현하는 것이다.

예를 들어 8 - 5를 보수법으로 계산을 해본다고 하면, 우선 -5의 보수를 구해보자
-5 의 2의 보수는 1111 1011이 된다.

   1111 1011    >> -5의 2의 보수
 + 0000 1000    >> 십진수 8의 이진수
 1 0000 0011

위와같이 8 bit 범위를 넘는 윗 자리수 1만 제외하면 3이라는 값이 나오는 것을 확인할 수 있다.

이와 같이 2의 보수법을 사용하면 덧셈만으로도 뺄셈 연산을 할 수 있게 되는 것이다.