가산기

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

이 문서를 인용한 문서