공부 기록/이산구조

11. Logic and Computers

와일 2026. 4. 13. 13:26
반응형

컴퓨터는 논리 기계다

컴퓨터는 숫자를 계산하는 기계가 아니라 사실 논리 연산을 하는 기계다. 컴퓨터의 모든 데이터는 0과 1로 표현되는데, 이게 바로 명제 논리의 True/False와 1:1로 대응된다.

  • 0 ↔ False
  • 1 ↔ True

산술 연산, 데이터 저장, 프로그램 명령어 — 전부 이 비트들에 대한 논리 연산으로 이루어져 있다.


Logic Gates: 논리의 하드웨어 구현

논리 연산자를 실제 하드웨어로 구현한 게 논리 게이트(Logic Gate)다. 게이트는 하나 이상의 비트를 입력받아 단일 비트를 출력한다.

게이트 논리 연산 설명
AND x ∧ y 둘 다 1일 때만 1
OR x ∨ y 하나라도 1이면 1
NOT ¬x 입력을 반전
XOR x ⊕ y 둘이 다를 때만 1

게이트들을 연결하면 회로(Circuit)가 된다. 한 게이트의 출력이 다음 게이트의 입력이 되는 식으로 체인처럼 이어지고, 이렇게 복잡한 연산을 구현할 수 있다.


XOR을 AND, OR, NOT으로 만들기

XOR은 기본 게이트가 아니지만, 아래 동치 관계를 이용하면 AND, OR, NOT만으로 구현할 수 있다.

x ⊕ y ≡ (x ∧ ¬y) ∨ (¬x ∧ y)

이 공식이 이미 AND, OR, NOT만으로 이루어져 있으니까, 공식을 그대로 회로로 그리면 XOR 게이트가 완성된다. 논리식 = 회로도인 셈이다.


Functional Completeness와 NAND 게이트

저번 시간에 {∧, ∨, ¬}이 functionally complete하다고 배웠다. 하드웨어 관점에서 보면 이 말은 AND, OR, NOT 게이트만으로 어떤 회로든 만들 수 있다는 뜻이다.

근데 더 놀라운 건, NAND 게이트 하나만으로도 functionally complete하다는 거다.

p NAND q = ¬(p ∧ q)

NAND 하나로 NOT, AND, OR을 전부 표현할 수 있다.

  • ¬p ≡ p NAND p
  • p ∧ q ≡ (p NAND q) NAND (p NAND q)

실제 반도체 제조에서 NAND 게이트 하나만 대량생산하면 세상의 모든 디지털 회로를 만들 수 있다. 경제적으로 엄청난 장점이다.


이진수 표현

컴퓨터는 숫자도 이진수(base-2)로 표현한다. 각 자리가 2의 거듭제곱을 나타낸다.

예를 들어 100100을 10진수로 변환하면:

1×2⁵ + 0×2⁴ + 0×2³ + 1×2² + 0×2¹ + 0×2⁰ = 32 + 4 = 36


Half Adder: 1비트 덧셈 회로

1비트 두 개를 더하면 결과가 두 자리가 될 수 있다. (1+1=10) 그래서 출력이 두 개다.

  • Sum(s): 결과의 현재 자리
  • Carry(c): 윗자리로 올라가는 올림
x y c s
0 0 0 0
0 1 0 1
1 0 0 1
1 1 1 0

진리표를 보면 패턴이 보인다.

  • s = x ⊕ y (둘이 다를 때만 1 → XOR)
  • c = x ∧ y (둘 다 1일 때만 1 → AND)

이 XOR 게이트 + AND 게이트 조합이 Half Adder(HA)다.


Full Adder: carry-in까지 처리

Half Adder는 x랑 y만 더할 수 있다. 근데 실제 멀티비트 덧셈에서는 아랫자리에서 올라온 carry-in도 같이 더해야 한다.

10진수 369 + 451을 생각해보면:

  • 1의 자리: 9+1=10 → 0 쓰고 1 올림
  • 10의 자리: 6+5+올림 1 = 12 → 2 쓰고 1 올림
  • 100의 자리: 3+4+올림 1 = 8

각 자리마다 아랫자리의 올림을 같이 처리해야 한다. 이진수도 똑같다.

Full Adder(FA)는 입력이 세 개(x, y, carry-in)이고 출력이 두 개(sum, carry-out)다. Half Adder 두 개를 이렇게 연결하면 만들 수 있다.

  1. 첫 번째 HA로 x와 y를 더한다.
  2. 두 번째 HA로 그 결과에 carry-in을 더한다.
  3. 두 HA 중 하나라도 carry가 나오면 carry-out = 1.

Ripple-Carry Adder: n비트 덧셈

Full Adder 하나는 1비트 덧셈만 한다. n비트 덧셈이 필요하면? FA를 n개 일렬로 연결하면 된다. 각 FA의 carry-out이 다음 FA의 carry-in으로 들어가는 식으로.

이게 Ripple-Carry Adder다. carry가 오른쪽에서 왼쪽으로 물결처럼 전파된다고 해서 붙은 이름이다.

16비트 덧셈 = FA 16개를 연결한 것. 각 FA가 자기 자리만 담당하고, 올림만 옆으로 넘기는 구조다.


추상화: CS의 핵심 아이디어

이 강의 전체의 핵심은 추상화(Abstraction)다. 아랫단계의 복잡함을 숨기고 그 위에 더 강력한 걸 쌓는 것.

반응형

'공부 기록 > 이산구조' 카테고리의 다른 글

13. Directed Graphs  (0) 2026.05.05
12. Quantificational Logic  (3) 2026.04.14
10. Normal Forms  (2) 2026.04.13
09. Propositional Logic  (0) 2026.04.06
08. Structural Induction  (0) 2026.04.06