yeolyi.com성열의 컴퓨터공학

0과 1

컴퓨터는 정보를 몇 가지의 명확히 구분되는 값으로만 표현하는 디지털 방식을 택했습니다. 그런데 0, 1, 2를 사용하는 3진법이나 0, 1, 2, 3을 사용하는 4진법도 디지털 방식일텐데 왜 0과 1만을 사용하는 이진법을 핵심 원리로 삼았을까요?

컴퓨터는 손가락이 두 개

사람은 손가락이 10개여서 10진법을 쓰니 2진법을 쓰는 컴퓨터는 손가락이 2개라고 생각할 수 있겠습니다. 컴퓨터가 이진법을 사용하는데에는 매우 현실적인 하드웨어 공학적인 이유가 있습니다.

컴퓨터는 전기로 작동하며 전기 신호는 생각보다 내재적인 변동성을 지닙니다. 전선을 지나면서 약해지기도 하고, 부품이 오래되면 제 성능을 못 내기도 하며, 작동 중 발생하는 열 때문에 신호가 흔들리기도 합니다. 이런 신호 품질 저하때문에 신호를 여러 단계로 나눈다면 다른 단계로 쉽게 오인될 수 있습니다.

이런 불안정함 속에서 가장 확실하게 정보를 구분하는 방법은 분명히 높거나(1) 아니면 분명히 낮거나(0)처럼, 두 가지 상태만을 사용하는 것입니다. 신호가 다소 약해지거나 약간의 잡음이 섞여도, 1로 인식될 만큼 충분히 높거나 0으로 인식될 만큼 충분히 낮다면 컴퓨터는 정보를 정확히 판독할 수 있습니다. 이처럼 2진법은 신호의 작은 변화에도 훨씬 너그럽고, 덕분에 안정적인 컴퓨터를 만들 수 있습니다.

2진법 (2레벨)오류 0/24
10진법 (10레벨)오류 6/24

수신된 신호를 가장 가까운 레벨로 판독한다. 판독 오류가 난 구간만 아래에 표시된다.

노이즈
±20%

결국 컴퓨터가 2진법을 쓰는 건 불완전한 현실 세계의 전기 신호로도 믿을 수 있는 기계를 만들려는 엔지니어들의 가장 실용적인 선택이었던 셈입니다.

비트

앞서 컴퓨터가 0과 1이라는 두 가지 상태를 사용해 정보를 표현한다고 이야기했습니다. 바로 이 0 또는 1 하나하나, 즉 컴퓨터가 다루는 가장 작은 정보의 단위를 ‘비트(bit)’ 라고 부릅니다. 우리가 컴퓨터로 하는 모든 정교한 작업은 결국 이 작은 비트들을 다루는 과정이라고 볼 수 있습니다.

메가바이트, 기가바이트처럼 일상생활에서는 바이트(byte)라는 단위가 더 익숙할 수 있습니다. 1바이트는 8비트로 이루어져 있습니다.

이진법

비트 여러 개를 나란히 놓으면 숫자를 나타낼 수 있습니다. 어떻게 그럴 수 있는지 우리가 평소에 쓰는 숫자부터 돌아봅시다.

일상에서 우리는 총 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

이렇게 이진수로 표현한 수를 논리 게이트들로 처리하면 새로운 의미있는 수를 만들 수 있습니다.

마무리

왜 컴퓨터가 0과 1이라는 이진법을 선택했는지 그 현실적인 이유와, 0과 1로 정보를 나타내는 단위인 비트, 그리고 비트로 수를 나타내는 방법을 살펴보았습니다.

다음 글에서는 이 비트들을 가지고 어떻게 논리적인 판단을 내릴 수 있는지, 그리고 그 논리가 어떻게 실제 회로로 구현되는지 살펴봅시다.