정보수학
세상에서 가장 단순하고 논리적으로도 쉬운 진법, 2진법 본문
진법이란 아래와 같이 약식으로 표현해볼 수 있다. 10진법의 예를 들어보자. a_n은 각 자리수를, b는 진법을 나타낸다고 해보자.
다만, 우리가 자주 쓰는 10진법보다는 2진법이 훨씬 더 이론적으로는 간결하다. 이유는 숫자 2개로만 나타낼 수 있는 점이 우선 가장 크다. 0과 1이라는 두가지 상태만으로 숫자 전체를 묘사할 수 있다. 현대의 디지털 컴퓨터는 이 간결함 때문에 2진법을 택하고 있는데, 디지털 회로의 전압이 5V일때는 1을, 0V일때는 0으로 정하고 모든 계산과 저장을 수행할 수 있기 때문이다. 컴퓨터는 자연을 해킹해서 계산력을 가져다 쓰는데, 가장 단순하게 가져다쓰기 위해서 0과 1이라는 두가지 상태를 기본으로 한 것이다. 그리고 언급한대로 2진법은 여러가지 직관을 줄 때가 있다.
1) 짝수화 홀수의 구분이 훨씬 쉽다.
2진수는 수의 끝자리수가 0으로 끝나면 짝수, 끝자리수가 1로 끝나면 홀수가 된다. 이렇게 단순하게 구분이 가능하다. 나는 수학자들의 많은 고민들이 2진법으로 생각했더라면 더 짧게 끝났을 것이라고 믿는다.
10진법 | 2진법 | 홀짝 | 소수 |
0 | 0 | 짝 | X |
1 | 1 | 홀 | X |
2 | 10 | 짝 | O |
3 | 11 | 홀 | O |
4 | 100 | 짝 | X |
5 | 101 | 홀 | O |
6 | 110 | 짝 | X |
7 | 111 | 홀 | O |
8 | 1000 | 짝 | X |
멱집합의 개수를 계산할때, 2의 제곱(2의 원소개수 제곱)형태로 표현할 때에도, 각 원소의 포함 여부를 따지면 되기 때문임을 상기하면(a,b,c세개의 원소 3개의 멱직합을 산정할때, 각기 3개 자리수의 2진수 숫자로 나타낸 후 모든 0,1을 대체하면서 조합을 세면 멱집합 개수가 나온다. 즉 2의 3제곱을 하면 된다), 2진법으로 무언가 나타냈을때 단순화되는 부분이 꽤 많다는 것을 알 수 있다. 개인적으로는 소수의 계산이나 처리에도 2진수가 훨씬 더 직관적이라고 믿고 있다.
2) 랜덤한 수를 생성한다고 해보자. 2진법에서는 어떻게 하면 될까?
정답은, 랜덤으로 0과 1을 계속 생성해서 적절한 자리수로 끊어 읽어내면 된다. 0과 1중 같은 빈도수로만 출력하는 간단한 함수를 반복해서 실행하고 그 stream만으로, 어떠한 랜덤한 수라도 만들어낼 수 있다. 같은 문제를 10진수에서 고민해보자면 0에서 9까지의 숫자를 임의로 출력하는 함수를 만들어야 하지만, 2진수에서는 그저 0과 1 사이의 선택의 문제로 단순화 된다. 물론 사실상 진법만 다르므로, 결국에는 같은 일이라고 볼 수 있으나, 이 문제를 2진법으로 생각해보면 훨씬 더 단순화된다는 사실을 알 수 있다. 이렇게 다양한 수학문제들이 단순화 될 수 있다.
2-1) pi를 2진수 값으로 만들어내면 각 자리수의 0과 1의 빈도수는 어떻게 될까?
pi는 순환하지 않는 무한 소수이다. 그리고 대부분의 사람이 직관적으로 맞추듯, 10진수에서 pi의 소수점 각 자리수들의 0에서 9까지의 각 숫자 출현 빈도는 같다. 그리고 사실은 이 사실은 어느 진법이든 상관없다. 그래서 2진법의 pi는 어떤 패턴이 나타나는가? 바로 0과 1이 순환하지 않고 전개되지만, 0과 1의 출현 빈도수는 같다는 점이다. 그렇다. 무리수의 순환하지 않는 숫자의 흐름은 기존 숫자의 흐름과 전혀 무관하게 발생하는 랜덤과 동일하다. 이를 무리수와 랜덤 stream의 등가 원칙이라고 이름붙여도 되겠다.
만약에 어떤 끝나지 않게 소수점이하로 이어지는 수가, 10진법에서 우연히 각 자리수의 빈도수가 같아지면 이는 특정 진법에서는 아닐 수도 있을 것이다. 그러나 2진수에서 0과 1의 출현 빈도가 같고 랜덤하다는 것은, 상위 진법으로 변환해도 마찬가지라는 의미가 된다. 이렇게 수학의 일반적인 법칙들은 2진수로 관찰했을때 더 분명하고 보편적으로 나타낼 수 있다. 만약에 2진수로 나타내었을때 0과 1의 출현 패턴이 랜덤하지 않고 조금이라도 편중되면, 특정 진법에서 어떤 수가 반복적으로 나타나게 되는 것이다.
3) 2진법에서는 벤포드의 법칙이 사라진다.
2진법은 각 자리수가 올라갈 때마다 2배가 된다. 그래서 2진법의 자리수 증가는 밑이 2인 log의 증가와 일치한다. 2는 자연수 중 1이 아닌 가장 작은 수의 배수이다. 벤포드의 법칙( https://ko.wikipedia.org/wiki/%EB%B2%A4%ED%8F%AC%EB%93%9C%EC%9D%98_%EB%B2%95%EC%B9%99 )이라는 것이 존재하는데, 이런 현상이 나타나는 이유가 바로 이 2진법을 초과하는 진법이 존재하기 때문이다. 세상 모든 것이 일정한 비율로 커진다고 가정하면, 2진법을 초과하는 진법에서는, 유독 맨 윗 자리 숫자가 1을 유지하는 시기가 길어진다. 즉 1이 20%씩 생성장하면, 1.2, 1.44, 1.7, .. 하면서 오랫동안 앞자리가 1을 유지하다가 2와 3,4 등은 더 빠른 속도로 지나가 버린다. 그런데 우리가 2진법을 썼다면 이런 벤포드의 법칙이 나타나지 않았을 것이다. 가장 단순한 형태의 진법이 사용되지 않기 때문에 이런 편중이 사라지는 것이다.
4) 나눗셈도 훨씬 빨라진다.
10진법은 10자리수의 나눗셈을 만나면 쉽게 암산할 수 있다. 즉 100 나누기 10은 10이다. 10이 증가할때마다 딱 떨어지므로 계산이 쉬워진다. 그런데 2진법은 그 주기가 더 짧아진다. 즉, 짝수로 나누면 나눗셈이 간결해지고 나머지 파악도 쉽다. 나눗셈말고 사실은 다른 사칙연산도 유사하다. 0과 1로만 이루어진 2진수의 자리수 계산은 10진법보다 훨씬 빠르게 이루어질 수 있다.
지금까지 간단히 몇가지 2진법에 대한 장점들을 살펴보았다. 생각해보면, 10진수는 그저 인간의 손가락이 10개에서 연유되었다 뿐이지, 그다지 단순한 진법도 아니고 오히려 헷갈리게 만들 때가 있다. 따라서 모르스 부호나, 컴퓨터를 설계할때 2진법으로 한 것은 탁월한 선택이라고 생각한다. 그리고 수학의 난제를 고민할때도 2진수로 생각하면 의외로 진법의 혼란에 가려졌던 편중들이 더 분명하게 나타나는 경우가 많을 것이다. 10진법은 종종 우리를 헷갈리게 한다.