개요 — 이진 덧셈과 뺄셈의 기본 원리
이진수(Binary number)는 0과 1 두 가지 숫자로만 표현된다.
따라서 연산도 단순하지만, 자리올림(Carry) 또는 자리내림(Borrow)이 발생한다.
| A | B | A+B | 결과(Sum) | 자리올림(Carry) |
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 1 | 0 |
| 1 | 0 | 1 | 1 | 0 |
| 1 | 1 | 10 | 0 | 1 |
즉,
- 0+0 → 0
- 0+1 → 1
- 1+0 → 1
- 1+1 → 0 (Carry 1)
이 원리를 회로로 구현한 것이 Binary Adder(이진 가산기) 이다.
Half Adder (반가산기)
가장 기본적인 가산기 구조다.
입력 두 개(A, B)를 받아서, 합(Sum) 과 자리올림(Carry) 를 출력한다.
논리식 :
Sum = A⊕B
(XOR 연산은 서로 다를 때 1, 같을 때 0)
| A | B | Sum | Carry |
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
즉, Half Adder는 XOR 게이트와 AND 게이트 두 개로 구성된다.
Full Adder (전가산기)
Half Adder는 자리올림을 입력으로 처리하지 못한다.
그래서 이전 자리에서 올라온 Carry 입력(Cin) 을 포함한 Full Adder 구조가 필요하다.
입력: A, B, Cin
출력: Sum, Cout
논리식 :
Sum = A⊕B⊕Cin
즉, 두 입력의 합뿐 아니라, 이전 자리에서 올라온 자리올림까지 고려한 완전한 덧셈을 수행한다.
| A | B | Cin | Sum | Cout |
| 0 | 0 | 0 | 0 | 0 |
| 0 | 0 | 1 | 1 | 0 |
| 0 | 1 | 0 | 1 | 0 |
| 0 | 1 | 1 | 0 | 1 |
| 1 | 0 | 0 | 1 | 0 |
| 1 | 0 | 1 | 0 | 1 |
| 1 | 1 | 0 | 0 | 1 |
| 1 | 1 | 1 | 1 | 1 |
Full Adder는 보통 Half Adder 두 개 + OR 게이트 하나로 구현된다.
Ripple Carry Adder (리플 캐리 가산기)
Full Adder 여러 개를 직렬로 연결하면 다비트 이진수를 덧셈할 수 있다.
이 구조를 Ripple Carry Adder 라고 한다.
- 각 자리의 Carry-out이 다음 자리의 Carry-in으로 전달된다.
- n비트 덧셈을 위해 n개의 Full Adder가 필요하다.
예를 들어, 4비트 가산기라면:
FA0 → FA1 → FA2 → FA3
이렇게 캐리가 순차적으로 전파된다.
하지만 이 구조는 캐리가 전파될 때까지 기다려야 하므로, 속도가 느린 단점이 있다.
Carry Look-Ahead Adder (CLA)
Ripple Carry의 속도 문제를 개선한 것이 Carry Look-Ahead Adder 이다.
이 구조는 캐리 발생 여부를 미리 계산해버린다.
핵심 아이디어 :
- Generate (G) = A·B → 자리올림이 생성되는 조건
- Propagate (P) = A ⊕ B → 자리올림이 전달되는 조건
이를 통해 캐리를 병렬적으로 계산할 수 있어 속도가 빠르다.
현대 CPU의 ALU는 대부분 이 구조를 사용한다.
Binary Subtractor (이진 감산기)
이진수 뺄셈도 비슷한 방식으로 수행된다.
하지만 직접 빼는 대신, 보수를 이용한 덧셈 방식으로 계산하는 것이 일반적이다.
(1) 기본 규칙
| A | B | A-B | 결과(Diff) | 자리내림(Borrow) |
| 0 | 0 | 0 | 0 | 0 |
| 0 | 1 | -1 | 1 | 1 |
| 1 | 0 | 1 | 1 | 0 |
| 1 | 1 | 0 | 0 | 0 |
(2) Half Subtractor (반감산기)
입력 A, B → 출력 Diff, Borrow
Diff=A⊕B
즉, A가 0이고 B가 1일 때 자리내림이 발생한다.
(3) Full Subtractor (전감산기)
이전 자리에서 Borrow가 들어올 수도 있으므로 Full Subtractor 구조를 쓴다.
입력: A, B, Bin
출력: Diff, Bout
Diff=A⊕B⊕Bin
B
(4) Subtractor 구현 방법 – 2의 보수법(Complement Method)
컴퓨터에서는 별도의 감산기를 두지 않고,
뺄셈을 덧셈으로 바꿔서 처리한다.
A−B=A+(B‾)+1
즉,
- B의 각 비트를 반전(1의 보수)
- 1을 더함 → 2의 보수
- 이를 A에 더하면 뺄셈 결과와 동일하다.
이 방식은 하드웨어에서 Adder 회로 하나만으로 덧셈과 뺄셈 모두 처리할 수 있어 효율적이다.
요약 정리
| 구분 | 입력 | 출력 | 핵심 논리식 | 주요 구성 게이트 |
| Half Adder | A, B | Sum, Carry | Sum = A⊕B Carry = AB |
XOR, AND |
| Full Adder | A, B, Cin | Sum, Cout | Sum = A⊕B⊕Cin Cout = AB + BCin + ACin |
XOR, AND, OR |
| Half Subtractor | A, B | Diff, Borrow | Diff = A⊕B Borrow = A′B |
XOR, AND, NOT |
| Full Subtractor | A, B, Bin | Diff, Bout | Diff = A⊕B⊕Bin Bout = A′B + A′Bin + BBin |
XOR, AND, OR, NOT |
Binary Adder/Subtractor는 디지털 시스템에서 모든 산술연산의 기초다.
덧셈, 뺄셈뿐만 아니라 곱셈, 나눗셈, 비교, 주소 계산 등
모든 연산의 기반 회로로 사용된다.
- Adder의 종류: Half, Full, Ripple Carry, Carry Lookahead
- Subtractor의 구현: 보수법(Complement)을 통한 덧셈 변환
즉, 이들은 단순한 논리회로의 조합을 넘어,
현대 컴퓨터의 연산 구조(Arithmetic Unit)를 이해하는 핵심 모델이라 할 수 있다.
'ELECTRONIC' 카테고리의 다른 글
| Quine–McCluskey Method (카르노 맵의 대안적 논리식 최소화 방법) (0) | 2017.07.05 |
|---|---|
| 카르노 맵(Karnaugh Map) (0) | 2017.07.05 |
| 최소항(Minterm)과 최대항(Maxterm) 전개 (0) | 2017.07.05 |
| 조합 논리 회로 설계(Combinational Logic Design) (0) | 2017.07.05 |
| 드모르간의 법칙 (0) | 2017.07.05 |