가산기
- 이진수 덧셈하다가 carry가 있으면?
- 십진수 덧셈할 때처럼 처리한다:
1 11100 + 11010 ------- 110110
- 또 다른 예시:
1111 1101 + 10111 ------- 110110
- 십진수 덧셈할 때처럼 처리한다:
- Half adder:
- 반가산기는 두 개 비트 덧셈밖에 못함.
- Full adder:
- Binary adder:
- half adder 하나와 full adder를 이어 붙이면 된다.
- 부호를 어떻게 표현할 것인가?
- 최상위 비트가 0이면 양수, 1이면 음수로 취급하면:
- 이 방식은 너무 많은 아트웨어를 필요로 한다. 그 대안은…
- 2의 보수를 취하는 방식:
- invert한 다음 1을 더한다:
- 만약
이라면, - 원본으로 되돌리려면 다시 2의 보수를 취하면 된다:
- 이제 양수와 음수를 아래와 같이 표현할 수 있음:
- 8비트 컴퓨터에서 표현할 수 있는 최대, 최소는:
- 최대:
- 최소:
- 최대:
- invert한 다음 1을 더한다:
- 최상위 비트가 0이면 양수, 1이면 음수로 취급하면:
- 2’s complement adder/subtractor:
- 음수를 표현할 수 있으므로 덧셈과 같은 방식으로 뺄셈도 가능.
- 만약 3에 -2를 더한다면:
11 0011 + 1110 ------ 0001
- 마지막 CARRY 값은 버린다.
- 뺄셈은 어떻게 할까? 3에서 2를 뺀다면:
0011 0011 - 0010 + 1101 ------ = ------ 0001 0001
- 뺄셈은 두 번째 피연산자에 2의 보수를 취하고 더하는 것과 같음.
- 대상이 음수일 때도 마찬가지로 2의 보수를 취하고 더하면 된다.