25.06
지금까지 논리 게이트를 조합해 신호를 선택하고 분배하는 회로를 만들어보았습니다. 이번 글과 다음 글에서는 게이트를 조합해서 실제로 덧셈을 수행하는 회로를 직접 만들어봅시다.

스마트폰의 계산기 앱은 사람보다 훨씬 빠르게 덧셈을 합니다. 999,999 + 888,888 같은 계산도 순식간에 해냅니다. 그런데 그 계산기의 핵심도 결국 우리가 지금까지 배운 논리 게이트들의 조합일 뿐입니다.
컴퓨터가 어떻게 덧셈을 하는지 알아보기 전에, 우리가 평소에 어떻게 덧셈을 하는지
돌아봅시다. 예를 들어 123 + 456을 어떻게 계산할까요?
123
+ 456
-----
579
우리는 자연스럽게 오른쪽부터 한 자리씩 계산합니다. 만약 한 자리에서 10이 넘는 결과가 나오면 올림을 해서 다음 자리에 더해줍니다.
올림이 있는 좀 더 복잡한 예를 봅시다. 179 + 287을 계산해보면:
11 <-- (올림)
179
+ 287
-----
466
9 + 7 = 16이므로 6을 쓰고 1을 올림합니다.1 + 7 + 8 = 16이므로 6을 쓰고 1을 올림합니다.1 + 1 + 2 = 4입니다.이 과정을 잘 보면 두 가지 핵심 요소가 있습니다:
바로 이 두 가지가 컴퓨터가 덧셈을 하는 핵심 아이디어입니다. 그런데 컴퓨터는 0과 1만 알고 있지 않습니까. 어떻게 이 원리를 0과 1의 세계로 옮길 수 있을까요?
일상에서 우리는 총 10개의 숫자를 기본 단위로 삼는 십진법을 사용합니다. 십진법에서는 각 자리 숫자에 1, 10, 100, 1000처럼 점점 10배씩 커지는 값을 곱해서 전체 숫자를 만듭니다. 예를 들어, 숫자 123을 자세히 뜯어보면 이렇게 해석할 수 있습니다:
1 × 100 + 2 × 10 + 3 × 1
= 1 × 102 + 2 × 101 + 3 ×
100
즉, 가장 왼쪽 자리는 100의 자리, 가운데는 10의 자리, 마지막은 1의 자리를 뜻하는 것입니다. 자리값을 이용한 표현 방식입니다.
사실 컴퓨터도 똑같은 원리를 사용합니다. 단지 숫자를 표현할 때 0과 1, 두 개의 숫자만 사용할 뿐입니다. 그래서 자리가 늘어날 수록 10배가 아닌 2배씩 커지는 값을 곱합니다. 이를 이진법이라고 합니다.
예를 들어, 이진법으로 나타낸 이진수 1012을 십진수로 바꾸면 이렇게 됩니다:
1 × 22 + 0 × 21 + 1 × 20
= 1 × 4 + 0 × 2 + 1 × 1
= 4 + 0 + 1 = 510
이렇게 이진수로 표현한 수를 논리 게이트들로 처리하면 새로운 의미있는 수를 만들 수 있습니다.
먼저 간단한 예부터 시작해봅시다.
십진수 310 + 110 = 410를 이진수 버전으로 계산해보면 112 + 012 = 1002가 됩니다.
11 <-- (올림)
11
+ 01
-----
100
결과적으로 100₂가 나오고, 이는 십진수 4와 같습니다.
이 과정에서 핵심은 십진수 때와 마찬가지로 각 자리에서 발생하는 두 가지 결과입니다:
이제 본격적으로 덧셈 회로를 만들어봅시다. 한 자리 이진수 두 개를 더하는 가장 간단한 경우를 생각해봅시다.
가능한 모든 경우를 나열해보면:
0 + 0 = 0
0 + 1 = 1
1 + 0 = 1
1 + 1 = 10
마지막 경우가 흥미롭습니다. 1 + 1은 102이 됩니다. 즉, 현재 자리 결과(Sum)는 0이고 다음 자리로 넘어가는 올림(Carry)은 1이 발생하는 것입니다.
진리표를 보면 Sum은 A와 B가 다를 때만 1이 되고, Carry는 A와 B가 모두 1일 때만 1이 됩니다.
| Sum | Carry | ||
|---|---|---|---|
| 0 | 0 | 0 | 0 |
| 0 | 1 | 1 | 0 |
| 1 | 0 | 1 | 0 |
| 1 | 1 | 0 | 1 |
위의 진리표를 논리 게이트로 구현하면 한자리수 이진수 덧셈을 할 수 있는 계산기를 만든 것입니다. 이전 글에서 배운 대로 NAND 게이트만으로 구현하면 아래와 같습니다.
이 회로를 반가산기(Half Adder)라고 합니다. 이후 논의에서는 간결함을 위해 이를 하나의 블록으로 묶어 HALF ADDER로 표기합니다.
반가산기는 한 자리 이진수 두 개의 덧셈만 처리할 수 있습니다. 하지만 실제 덧셈에서는 아래 자리에서 올라온 올림값도 함께 처리해야 합니다. 다음 글에서는 이 문제를 해결하는 전가산기를 만들고, 여러 자리 덧셈까지 확장해봅시다.