Skip to main content
Summary

0과 1은 컴퓨터의 작은 블록이다

앞 장에서 우리는 전기로 조종되는 작은 스위치, 트랜지스터를 보았다. 트랜지스터 하나는 전기의 길을 열거나 닫을 수 있다. 컴퓨터는 이런 켜짐과 꺼짐의 상태를 보통 1과 0으로 해석한다.

그런데 여기서 궁금한 점이 생긴다.

"겨우 0과 1만으로 어떻게 글을 쓰고, 사진을 보고, 음악을 들을 수 있을까?"

비밀은 묶음에 있다. 레고 블록 한 개만 보면 할 수 있는 일이 적다. 하지만 블록이 많아지면 집도 만들고, 자동차도 만들고, 성도 만들 수 있다. 0과 1도 마찬가지다. 하나만 있을 때는 단순하지만, 여러 개가 줄을 서면 훨씬 많은 뜻을 담을 수 있다.

컴퓨터는 세상을 사람처럼 직접 이해하지 않는다. "빨간 사과", "안녕", "피아노 소리"를 보고 듣고 느끼는 것이 아니다. 대신 그것들을 모두 숫자의 줄로 바꾼다. 그리고 그 숫자를 다시 0과 1의 줄로 바꾼다. 컴퓨터가 다루는 정보는 결국 0과 1로 만든 긴 문장이라고 볼 수 있다.

0과 1로 세상을 표현하기AI 생성 이미지

비트: 가장 작은 선택지

컴퓨터에서 0 또는 1 하나를 비트라고 한다. 비트는 영어로 binary digit, 즉 "이진 숫자"라는 말에서 온 이름이다. 어렵게 느껴지면 비트를 이렇게 생각하자.

비트 하나는 작은 전등 하나와 같다.

  • 꺼짐: 0

  • 켜짐: 1

전등 하나로는 두 가지 상태만 표현할 수 있다. 예를 들어 "문이 닫힘"과 "문이 열림", "아니오"와 "예", "검은색"과 "흰색"처럼 두 가지 중 하나를 고를 수 있다.

그럼 비트가 두 개라면 어떨까?

  • 00

  • 01

  • 10

  • 11

이제 네 가지 상태를 표현할 수 있다. 비트가 세 개라면 000부터 111까지 여덟 가지가 된다. 비트가 하나 늘 때마다 가능한 모양의 수는 두 배가 된다. 왜냐하면 새 비트가 앞의 모든 경우에 0으로 붙을 수도 있고, 1로 붙을 수도 있기 때문이다.

간단히 쓰면 이렇다.

  • 1비트: 2가지

  • 2비트: 4가지

  • 3비트: 8가지

  • 4비트: 16가지

  • 8비트: 256가지

여기서 바이트가 나온다. 바이트는 보통 8개의 비트를 묶은 단위다. 8개의 작은 스위치가 줄지어 있는 상자를 떠올리면 된다. 각 스위치는 0 또는 1이 될 수 있으므로, 바이트 하나는 256가지 모양을 만들 수 있다.

예를 들어 이런 것이 한 바이트다.

01000001

이 줄은 그냥 보면 0과 1의 모임일 뿐이다. 하지만 어떤 약속을 쓰느냐에 따라 숫자 65가 될 수도 있고, 문자 하나가 될 수도 있고, 색의 밝기가 될 수도 있다. 중요한 점은 이것이다.

비트 자체에는 뜻이 없다. 뜻은 약속이 만든다.

이진수: 손가락으로 세는 다른 방법

우리는 평소에 십진수를 쓴다. 십진수는 0부터 9까지 열 개의 숫자를 쓰고, 자리가 올라갈 때마다 10배씩 커지는 방식이다.

예를 들어 347은 이렇게 읽을 수 있다.

  • 3은 백의 자리: 300

  • 4는 십의 자리: 40

  • 7은 일의 자리: 7

모두 더하면 347이다.

컴퓨터는 주로 이진수 방식으로 정보를 표현한다. 이진수는 0과 1만 쓰고, 자리가 올라갈 때마다 2배씩 커지는 방식이다. 오른쪽부터 자리를 보면 1, 2, 4, 8, 16, 32처럼 커진다.

손가락 놀이로 해 보자. 오른손 손가락 다섯 개에 오른쪽부터 다음 값을 붙인다.

  • 첫째 손가락: 1

  • 둘째 손가락: 2

  • 셋째 손가락: 4

  • 넷째 손가락: 8

  • 다섯째 손가락: 16

손가락을 접으면 0, 펴면 1이라고 하자. 숫자 5를 만들고 싶으면 4와 1을 펴면 된다.

  • 4의 손가락: 1

  • 2의 손가락: 0

  • 1의 손가락: 1

그래서 5는 이진수로 101이다. 오른쪽부터 1, 2, 4 자리이므로 101은 4 + 0 + 1을 뜻한다.

숫자 13은 어떻게 만들까?

13은 8 + 4 + 1이다. 그러면 8 자리, 4 자리, 1 자리를 켜고 2 자리는 끈다.

1101

이진수 1101은 8 + 4 + 0 + 1이므로 십진수 13이다.

이 방법을 알면 컴퓨터가 왜 0과 1만으로 큰 숫자를 표현할 수 있는지 보인다. 자리만 충분히 많으면 작은 0과 1도 아주 큰 수를 만들 수 있다.

문자는 숫자로 약속한다

숫자는 이진수로 바꾸면 된다. 그렇다면 글자는 어떻게 할까?

답은 간단하다. 글자마다 숫자 번호를 붙인다.

교실에서 출석번호를 붙이는 것과 같다. "민수"라는 사람 자체가 7번인 것은 아니지만, 반 안에서 "7번"이라고 부르면 모두 민수를 떠올린다. 문자 코드도 이와 비슷하다. 글자와 숫자를 연결하는 약속표를 만든다.

예를 들어 어떤 약속표가 이렇게 정해져 있다고 하자.

  • 1: A

  • 2: B

  • 3: C

그러면 숫자 1은 문자 A로 읽을 수 있다. 숫자 2는 B로 읽는다. 컴퓨터 안에서는 먼저 숫자가 이진수로 저장된다. 화면에 보여 줄 때는 약속표를 보고 "아, 이 숫자는 이 글자구나" 하고 바꿔 보여 준다.

실제 컴퓨터에서는 여러 문자 코드가 쓰인다. 예전에는 영어 알파벳과 기본 기호를 표현하는 작은 약속표가 많이 쓰였다. 지금은 한국어, 영어, 일본어, 이모지처럼 세계의 많은 문자를 함께 다루기 위해 더 큰 약속표를 쓴다. 중요한 원리는 같다.

문자는 컴퓨터 안에서 숫자이고, 그 숫자는 다시 0과 1이다.

여기서 조심할 점이 있다. 같은 0과 1의 줄이라도 어떤 약속표로 읽느냐에 따라 의미가 달라질 수 있다. 마치 같은 번호 3번이라도 1반에서는 지우를 뜻하고, 2반에서는 하준이를 뜻할 수 있는 것과 같다. 그래서 컴퓨터끼리 정보를 주고받을 때는 "이 글자는 어떤 방식으로 번호를 붙였는가"라는 약속이 중요하다.

색은 세 개의 숫자로 만든다

사진과 그림은 더 복잡해 보인다. 하지만 원리는 여전히 같다.

화면을 아주 가까이 들여다보면 작은 점들이 모여 있다. 이 작은 점을 픽셀이라고 한다. 픽셀은 디지털 그림을 이루는 작은 색종이 조각이다. 그림 한 장은 수많은 픽셀이 줄지어 놓인 모자이크라고 볼 수 있다.

그럼 픽셀 하나의 색은 어떻게 표현할까?

많은 화면은 색을 빨강, 초록, 파랑의 세 빛으로 나누어 표현한다. 이것을 보통 RGB라고 부른다.

  • R: 빨강의 세기

  • G: 초록의 세기

  • B: 파랑의 세기

각 색의 세기를 0부터 255까지의 숫자로 나타낼 수 있다고 하자. 0은 거의 없음, 255는 아주 강함이다.

예를 들어,

  • 빨강: (255, 0, 0)

  • 초록: (0, 255, 0)

  • 파랑: (0, 0, 255)

  • 검정: (0, 0, 0)

  • 흰색: (255, 255, 255)

이렇게 세 숫자를 정하면 픽셀 하나의 색을 표현할 수 있다. 숫자 255는 0부터 세었을 때 한 바이트로 표현할 수 있는 가장 큰 값이다. 그래서 빨강 한 칸, 초록 한 칸, 파랑 한 칸에 각각 8비트를 쓰면 픽셀 하나에 24비트가 필요하다.

그러면 가능한 색은 256 × 256 × 256가지다. 아주 많은 색을 만들 수 있다. 하지만 컴퓨터 입장에서는 여전히 숫자 세 개를 저장하는 일이다.

그림 한 장은 결국 이런 숫자들의 긴 줄이다.

(255, 0, 0), (255, 10, 0), (250, 20, 5), ...

사람은 이것을 노을 사진으로 보지만, 컴퓨터 안에서는 픽셀 색 번호들이 질서 있게 놓여 있다.

소리도 숫자의 줄이 된다

소리는 공기의 떨림이다. 북을 치면 북 가죽이 떨리고, 그 떨림이 공기를 흔든다. 우리의 귀는 그 흔들림을 받아 소리로 느낀다.

컴퓨터는 공기의 떨림을 그대로 넣을 수 없다. 그래서 소리의 순간순간을 숫자로 재어 저장한다. 마치 파도 높이를 일정한 간격마다 자로 재는 것과 같다.

예를 들어 아주 짧은 시간마다 소리의 흔들림이 어느 정도인지 잰다고 하자.

  • 첫 순간: 3

  • 다음 순간: 7

  • 다음 순간: 10

  • 다음 순간: 6

  • 다음 순간: 2

이 숫자들을 빠르게 다시 읽어 스피커를 움직이면, 스피커가 공기를 비슷하게 흔들어 소리를 되살린다.

여기서 중요한 말이 하나 있다. 샘플이다. 샘플은 긴 흐름에서 뽑아낸 한 번의 측정값이다. 그림에서 픽셀이 작은 점이라면, 소리에서 샘플은 아주 짧은 순간에 잰 소리의 흔들림 값이라고 생각하면 된다.

샘플을 더 자주 잴수록 원래 소리를 더 부드럽게 따라갈 수 있다. 한 칸씩 듬성듬성 그린 선보다, 촘촘히 찍은 점을 이은 선이 원래 모양에 가까운 것과 같다. 물론 더 촘촘히 재면 저장해야 할 숫자도 많아진다.

음악 파일도 결국 많은 숫자의 줄이다. 그 숫자들은 다시 0과 1로 저장된다. 스피커는 그 숫자를 전기 신호로 바꾸고, 전기 신호는 스피커의 떨림이 되어 우리 귀에 도착한다.

세상은 번역되고, 컴퓨터는 계산한다

이제 처음 질문으로 돌아가 보자.

"컴퓨터는 0과 1밖에 모르는데 어떻게 글, 사진, 음악을 다룰 수 있을까?"

답은 이렇다.

  • 숫자는 이진수로 바꾼다.

  • 문자는 숫자 번호로 약속한다.

  • 색은 픽셀마다 숫자로 나타낸다.

  • 소리는 순간순간의 값을 숫자로 잰다.

  • 그 모든 숫자는 0과 1의 줄로 저장한다.

컴퓨터는 사과의 맛을 알지 못한다. 노래가 슬픈지도 모른다. 사진 속 강아지가 귀엽다고 느끼지도 않는다. 하지만 숫자를 아주 빠르게 다룰 수 있다. 그래서 우리가 세상의 정보를 숫자로 잘 번역해 주면, 컴퓨터는 그 숫자를 저장하고, 옮기고, 계산하고, 다시 보여 줄 수 있다.

이것이 디지털 세계의 큰 아이디어다.

현실의 정보 → 숫자 → 0과 1 → 전기 신호

그리고 다시 반대로,

전기 신호 → 0과 1 → 숫자 → 글자, 그림, 소리

컴퓨터를 만든다는 것은 이 번역의 길을 하나씩 만드는 일이다. 지금까지 우리는 0과 1이 정보를 담는 방법을 배웠다. 다음에는 이 0과 1을 가지고 "둘 다 1일 때만 1", "하나라도 1이면 1", "0을 1로 뒤집기" 같은 판단을 하는 회로를 만들 것이다.

그 작은 판단 블록들이 모이면 계산이 되고, 계산이 모이면 명령을 실행하는 컴퓨터가 된다.

책 목록

처음부터 이해하는 컴퓨터 만들기

전체 목차 보기

이 노트는 보도·비평·교육·연구 목적으로 작성되었습니다. 저작권 문의가 있으시면 에서 알려주세요.

틸노트는 사용자가 AI를 활용해 노트를 쉽게 작성하거나 편집할 수 있는 서비스입니다.

AI 스퀘어 단톡방에 함께해요

AI 활용과 틸노트 사용 팁을 나누는 오픈채팅방입니다. 입장 비밀번호는 tilnote입니다.

참여하기