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