-
모스부호, 이진수, 비트교양 2022. 1. 11. 21:00
찰스 펫졸드는 그의 저서 '코드(Code)'의 앞부분에서 컴퓨터 하드웨어와 소프트웨어에 숨겨진 언어를 설명하기 위해 모스부호, 이진수, 비트에 대한 이야기를 들려준다. 컴퓨터의 물리적인 동작 원리를 추적해보면 결국은 전기가 통하는지(1) 그렇지 않은지(0)를 판단하는 지점을 만나게 될텐데, 그것이 어떻게 수많은 정보를 인식하고 처리할 수 있는지 설명하기 위해 이같은 이야기를 먼저 꺼내는 듯 하다. 끝까지 읽어보면 컴퓨터의 동작 원리를 어느정도 이해할 수 있으리라 기대한다.
1. 모스부호
새뮤얼 핀리 브리즈 모스(Samuel Finley Breese Morse, 1791-1872)가 고안하여 1844년에 완성한 전신 기호로, 짧은 발신 전류와 긴 발신 전류만을 가지고 전신부호를 구성하여 문장을 구성하여 전송할 수 있게 하였다. 통신기술이 발달한 지금에도 가장 기초적인 비상통신수단으로서 사용하고 있기도 하다. - 나무위키
로마자 모스 부호와 숫자 모스 부호 모스부호는 점과 선, 이 두 가지 부호의 조합으로 멀리 떨어져있는 사람과 소통할 수 있는 도구다. 점과 선은 상대적인 길이를 가지는데, 점이 1의 길이를 가진다면 선은 3의 길이를 가진다. 점을 위해 1초간 "뚜"하는 소리를 들려준다면, 선을 위해서는 3초간 "뚜"하는 소리를 들려주는 것이다. 점과 선 외에도 숨겨진 부호가 있으니, 바로 '간격'이다. 예를 들어 "A"는 점과 선 사이에 점 하나만큼의 간격을 둔다. "hi"처럼 두 글자를 표현하는 경우에는 글자 사이에 선 하나 만큼의 간격을 둔다.
.... .. (hi)
그리고 단어 사이에는 선 두 개 만큼의 간격을 둔다
.... .. - .... . .-. . (hi there)
참고로 국제 조난 신호로 알려져있는 "SOS"는 약어가 아니라 모스 부호에서 쉽게 기억할 수 있는 조합(세 번의 점, 세 번의 선, 세 번의 점)을 선택한 것이다.
... --- ... (sos)
이렇게 두 가지의 조합을 적절히 사용하면 거의 모든 형태의 정보를 표현할 수 있게 된다. 이렇게 두 가지 기호의 조합으로 이루어진 체계를 이진부호라 한다.
2. 비트(bit)
우리는 일반적으로 수를 셀 때 십진법을 사용한다. 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 이렇게 10개의 기호를 가지고 수를 표현하는 것이다. 십진법에서 십을 표현하기 위해 별도의 기호를 두지 않고 1과 0을 붙여 '10'이라 쓴다. 같은 맥락으로 이진법에서는 0, 1 다음에 10(일 공)이 온다.
십진수 이진수 0 0 1 1 2 10 3 11 4 100 5 101 6 110 7 111 컴퓨터는 이진수를 기반으로 수많은 정보를 인식하고 처리한다. 전기가 들어오거나(1), 들어오지 않거나(0) 이 두 가지 상태를 가지고 정보를 처리하는 것이다. 컴퓨터가 처리하는 정보의 최소단위, 0이나 1을 나타내는 하나의 숫자를 '비트(bit)'라 한다.
비트를 활용해 어떻게 정보를 표현할 수 있는지 살펴보자. 두 친구 '수호'와 '현규'가 만나기로 약속을 했다. 둘 중 누군가 지각을 하거나, 둘 다 지각을 하거나, 둘 다 제 때 오거나 하는 경우가 있을 수 있다. 모든 경우의 수를 비트로 표현한다면 어떻게 할 수 있을까? 아래와 같이 첫 번째 자리는 수호를 위해, 두 번째 자리는 현규를 위해 할당한 두 개의 비트(2비트)가 필요하다.
00 : 수호, 현규 모두 제 때 옴
01 : 현규 지각
10 : 수호 지각
11 : 수호 현규 모두 지각
다시 말해 2비트를 가지고 표현할 수 있는 경우의 수는 4개이다.
세 친구가 모이는 경우에는 어떻게 될까? 친구 원문이도 함께 모이기로 한 경우를 살펴보자.
000 : 모두 제 때 옴
001 : 원문 지각
010 : 현규 지각
011 : 현규 원문 지각
100 : 수호 지각
101 : 수호, 원문 지각
110 : 수호, 현규 지각
111 : 모두 지각
하나의 비트 추가해 8개의 경우의 수를 표현할 수 있다. 비트의 수가 많아질수록 표현할 수 있는 정보의 양이 많아지는 것이다. 비트로 표현 가능한 경우의 수는 2에 비트의 수를 거듭제곱한 것과 같다.
비트 수 표현 가능한 경우의 수 1 2^1 = 2 2 2^2 = 2 * 2 = 4 3 2^3 = 2 * 2 * 2 = 8 4 2^4 = 2 * 2 * 2 * 2 = 16 5 2^5 = 2 * 2 * 2 * 2 * = 32 반대로 얼마나 많은 경우의 수가 필요한지 알 때, 이를 표현하기 위해 얼마만큼의 비트가 필요한지 어떻게 알 수 있을까? 거듭제곱의 반대인 로그(logarithm)를 활용하면 된다. 2진수이기 때문에 밑수를 2로 가지는 로그연산을 취하면 된다.
표현해야 하는 경우의 수 필요한 비트 수 32 log232 = 5 64 log264 = 6 200 log2200 = 7.64 (8비트를 사용하면 됨) 4. 참고자료
- 찰스 펫졸드, 코드(Code)