본문 바로가기
IT 이론/컴퓨터구조

음수 표현을 위한 보수법과 보수를 이용한 뺄셈⑵

by 지식id 2016. 10. 13.
반응형
앞선 포스팅에서 10진수의 보수 연산을 보았다. 그런데 그닥 편해 보이지도 않았고 뺄샘을 쉽게 하기 위한 연산인데 보수를 구하기 위해 뺄샘을 해야 한다는 게 아이러니 했다. 그리고 왜 굳이 10(n)의 보수와 9(n-1)의 보수를 구분해서 사용하는 지도 이해가 되지 않았다. 이번에는 2진수의 보수 연산을 보며 이 궁금증을 풀어 보자.

101011의 보수를 구해 보자. 2진수에선 2의 보수와 1의 보수가 있다고 하였다.

1의 보수
111111 - 101011 = 010100
※ 1의 보수는 그냥 각 자리를 반전시켜 버리면 된다.

2의 보수
1000000 - 101011 = 010101
※ 2의 보수는 1의 보수에 1만 더해주면 된다.

10진법 보수 연산과의 차이점이 보이는가? 뺄샘이 필요가 없다! 컴퓨터 공학적으로 말하자면 그냥 NOT회로 하나면 된다.

뻴샘 과정은 10진수와 동일하다. 감산 대상 값에 보수를 더해주면 된다.

110111 - 101011 = 001100
을 보수 연산을 이용해서 계산해 보자.

1의 보수를 사용하면
110111 + 010100 = 1001011

Carry 가 발생 하였으므로 Carry 값 1을 뒤에 더해준다.
001100

2의 보수를 사용하면
110111 + 010101 = 1001100

Carry 값을 버린다.
001100

이렇게 계산이 된다. 2진수는 10진수와 다르게 보수를 구하는 과정이 너무 쉽기 때문에 컴퓨터 입장에서 별도의 감산 회로를 구축하는 것보다 보수와 가산기만 이용하는 것이 더 유리하다.

1의 보수와 2의 보수를 모두 사용하는 이유는 보수를 구하는 데에는 1의 보수법이 훨씬 편하지만 연산을 하거나 값을 저장 할 때에는 2의 보수법이 유리하기 때문이다.

연산 시
Carry 가 발생 했을 때 굳이 이를 저장하고 한번 더 더하고 할 필요 없이 그냥 버리면 된다.

저장 시
1의 보수법에선 000000의 보수 표현인 111111도 0이다. 000000은 +0 이고 111111은 -0 인 것이다. 결국 0이 두개 존재하기 때문에 저장 공간이 1개 줄어든다.
※ 당연한 것이지만 산술적으로 +0과 -0을 구분하는 건 쓸모가 없다.
2의 보수법에선 000000의 보수 표현이 000000이다. +0과 -0의 구분이 없기 때문에 1의 보수법이나 부호화 절대치법에 비해 저장 공간이 한개 더 늘어난다.

※ 부호화 절대치법
부호들 표시하기 위해 맨 왼쪽에 한 비트를 추가하여 부호 flag로 사용하는 것이다.
10011의 양수와 음수를 표현 하기 위해 010011(양수), 110011(음수) 이렇게 표현한다. 이 또한
0을 표현하는데 있어서 000000(+0), 100000(-0) 이렇게 두 가지로 구분된다.


반응형

댓글