십진법 시스템
목차
엄밀히 말하면 십진법(base 10)과 소수 (Decimal)는 다른 것이고 또 한국에서 그렇게 가르칩니다. 용어 도입의 문제에서 개념을 좀 다르게 받아들인 건데 한국의 교육 과정에서는 십진법을 정수 뿐 아니라 소수까지 포함하는 Decimal 개념을 조금 분명하지 않게 넘어가는 것 같습니다.
decimal 을 한국어로 소수로 번역하는데 캠브리지 영어 사전에는 relating to or expressed in a system of counting based on the number ten: 숫자 10에 기초하는 카운팅 시스템으로 표현되거나 관련된, 이라는 뜻 입니다. 한글에서 소수는 0 이하의 소수점을 이야기하는데 사용되니까 1 이상 정수에 대해서는 포함하지 않는다 – 는 느낌을 받습니다.
물론 수학을 더 깊이 공부한 사람들은 소수 시스템의 표기를 바꾸면(예를 들어 과학적 표기법 – (scientific notation) 정수를 다 포함할 수 있다는 것을 알지만 대부분 사람들은 거기까지 생각하지 않습니다. (저 같이 수리에 무지한 부류인 경우)
해서 이번 포스팅에서는 십진법의 개념을 다시 한번 돌아보고 한글로 소수라 번역하는 decimal 을 다시 리프레시 해보고자 합니다.
십진법 시스템 (decimal system)과 정수
십진법이란 영어로 base 10 이라고 쓰며 base -> 기초가 10이라는 것 입니다. 그러면 10은 뭘까요? 1, 2, 3, 4 … 10 이것까지는 현대인들은 초등학교만 나와도 배웁니다. 그런데 수를 세는 것 이상으로 중요한 것이 있습니다. 수학을 이해하려면 이제 그 다음 단계를 알아야 하는데 base – 라는 진법 시스템입니다.
수라는 건 사람이 셀 수 있어야 하는데 (인지할 수 있어야 함) 밑바닥부터 보면 1진법 부터 나옵니다. 1진법은 그 자체가 아주 인간적이죠. 예를 들면 목장에 송아지가 열마리 있습니다. 숫자를 세면 하나씩 셉니다.
그게 바로 1진법입니다. 너무 쉬워서 이해가 가지 않을 수 있는데 송아지 하나를 . 점으로 놓고 표시해봅니다.
. . . . . . . . . .
이게 지금 목장에 있는 송아지의 숫자를 표현한 것 입니다. 뭔가 어색하다면 당신은 현대인입니다. 실제 고대인들은 가축의 숫자를 돌에 세기는 방법 등으로 다음날 가축의 수가 맞는지 확인했다고 합니다. 우리들이 봤을 때는 숫자도 안쓰고 무식한 거지만 인류의 조상인 그들은 그 시대에 맞는 두뇌를 풀가동해서 수학을 실생활에 적용한 것이니까, 어떤 면에서 잘 이해도 못하는 내용을 탁상 공론하는 수학보다는 더 실제적인 것 입니다. (수학이 탁상공론은 아니지만 많은 사람들이 수학으로 고민하다가 결과가 없이 또는 잘못된 계산으로 끝나는 일도 있다)
고대인들이 수학을 어떻게 썼을까 상상해보면 목장의 가축을 다 보여주는 것은 그들에게도 쉽지 않은 일입니다. 그래서 . . . . . 이 표시된 돌맹이를 다른 부족간에 서로 보여주면서 누가 더 많은 가축을 기르고 있는지 알 수 있었을 겁니다. 소위 회계장부를 비교하며 누가 더 풍요롭고 강한 부족인지 알 수 있었을 거다(서열정리)
이게 1진법입니다. 0진법은 없냐구요? 0이란 개념이 발견된 것은 5세기경 인도로 알려져 있습니다. 사피엔스가 20~30만년 전에 아프리카에서 이주한게 현생 인류라는 가설에 따르면 약 1500년 전까지 0진법은 없었을 겁니다. 기원전에도 피타고라스 등 수학을 발달시킨 레전드 학자들이 있는데, 그러고 보면 딱히 0이 없어도 수학이 가능한 것 같습니다.
여튼 0이란 개념은 또 다른 차원을 더하는 것이기에 약간 제외하고 설명하겠습니다.
N진법 – 이진법의 등장
1진법은 너무 좀 투박하죠. 그래서 인간은 N진법의 장점을 알게됩니다. 개인적으로 N진법 중에서 가장 처음에 나온 것은 당연히 2진법 이었을거라 생각합니다. 왜냐하면 수가 아니라 만물과 인생의 본질적인 수, 철학적이고 만물을 포괄할 수 있는 시스템이기 때문입니다. 철학적이고 또 종교적이죠.
첫번째로 인간은 태어나고 죽습니다. 생과 사 현대적 숫자로 대입하면 0과 1입니다. 코딩을 할 때 어떤 상태(State)의 활성화(生)와 비활성화(死)는 0과 1의 Bool 자료형을 사용합니다. 게임을 코딩할 때도 캐릭터가 살아있으면 1 죽으면 0으로 처리하면 됩니다
또 낮과 밤이 있습니다. 낮은 밝고, 밤은 어둡습니다. 두 개의 상태를 표현하는데는 숫자를 두개만 세면 됩니다.
대다수 동물에겐 암수 구분이 있고 인간의 경우는 남성과 여성이 있습니다.
(최근에는 중성도 있다고 하지만 자연의 번성 조건인 생식능력으로 구분하면 남과 여 두 종류밖에 없다 – 유전공학이 더 발달하면 달라지겠지만 아직은 아니다)
식물에는 해의 가림에 따라 응달이 있고 양달이 있습니다.
이것들은 0과 1의 이진법으로 표현가능한 자연의 원리입니다. 19세기의 수학자 조지 부울은 0과 1만으로 세상의 거의 모든 문제를 설명할 수 있다고 하는 부울 대수 이론을 만들었습니다. 부울 대수는 컴퓨터 회로를 설계하는 기초입니다.
이진법은 별로 수를 못셀 것 같지만 그렇지 않습니다. 1진법과 비교해볼까요?
1진법에서 숫자 8을 . 쩜 8개로 표시해보겠습니다.
. . . . . . . .
이진법의 숫자 8은?
1000
기호가 4개나 줄었습니다. 점보다는 조금 복잡하긴 하지만 가독성은 확실히 좋습니다. 그렇다면 255를 표현해보면 어떨까요?
1진법은 점을 255개 찍어야 합니다.
. . . . . . . . . . (10개)
. . . . . . . . . . (10개)
. . . . . . . . . . (10개)
. . . . . . . . . . (10개)
음,,,
이렇게 25 줄이 넘은 다음에 점을 다섯개 더 찍으면 됩니다.
그럼 이진법은?
1111 1111
입니다.
숫자가 커질 수록 이진법의 효과가 극대화 됩니다.
예를 들어 이진법 16bit 인 다음 수는 65335 입니다. 쩜을 65336 찍는다면 에바(over)겠지요.
1111 1111 1111 1111
이진수는 직관적이고 뛰어난 시스템입니다. 사실 우리가 사용하는 컴퓨터의 모든 명령어들은 최종적으로 이진법 코드로 변환됩니다. 그걸 기계어라고 합니다.
컴퓨터 프로그래밍에서는 2진법의 배수인 8진법, 16진법도 함께 사용하는데 이는 자연스럽기 때문입니다. 2진법은 10진법으로 배수 확장이 안됩니다. 흥미롭게도 인간은 10개의 손가락을 가지고 있기 때문에 10진법이 자연적인 2진법과 잘 맞지 않음에도 꾸역꾸역 잘 쓰고 있습니다.
사람은 크게 봐서는 대칭입니다. 오른손 왼손 오른발 왼발 눈은 양쪽에 하나 요런 식으로 두개 있는게 많습니다. 다만 손가락의 경우는 한쪽에 네개의 손가락이 있고 이를 보조하는 엄지손가락 하나가 있어서 무거운 물체를 들거나 정교한 동작을 하는 등 손으로 하는 노동에 최적화 되어 있습니다. 이는 달리기는 기가막히게 잘하지만 무언가 손에 쥘 수 없는 네발 동물들(개, 고양이 등)과 비교하면 확연히 차이가 나는데요.
사람의 신체와 동물의 몸 구조에도 자연의 원리가 다 적용되어 있는 겁니다. 숫자 십진법은 그런 변칙적인 부분이 인간에게 또 다른 창조성을 부여한 지도 모르겠습니다. 자연을 벗어나기 위해서는 틀을 벗어나야 하는데 손가락은 그런 발상을 깨뜨리기에 충분합니다. 세상은 1과 0으로 만들어져 있지만 꼭 거기에 따를 필요는 없다 – 는 느낌을 받지요.
10진법을 영어로 decimal system 이라 하는데 이진법은 binary system 이라 합니다. 바이너리, 컴퓨터를 좀 쓰는 사람들은 많이 듣는 단어인데요. 리눅스나 윈도우에 프로그램을 설치하면 거의 bin 이란 폴더를 많이 볼 수 있는데 이진법으로 된 기계어 코드를 의미합니다. CPU가 실행할 수 있는 파일은 바이너리(이진) 파일이므로 지금도 실행 코드가 들어있는 폴더를 bin 이라고 하는 관습이 이어지고 있습니다.
10진법 – 표현하기
10진법은 가장 인간적인 숫자입니다. 손가락으로 세기 때문에 몸의 강렬한 기억으로 사용할 수 있고 사람들간에 말이 필요없습니다. 손가락만 접으면 숫자건 암호건 전달이 가능합니다.
단지 2진법 계열과 확장이 잘 안된다는 건데… 인간에게도 이진법이 있습니다. 팔은 두쪽이 있으니까 한 팔을 들면 하나 두팔을 들면 둘, 즉 이진법이 됩니다. 눈을 뜨면 0 눈을 감으면 1 이렇게 하면 총 네개의 숫자(0~3)를 표현할 수 있습니다. 0 0 <- 눈을 뜬 것 둘다 0이다. 1 1 < – 감은 것 3이다.
다른 신체보다 많은 수를 표현하기에 적합하기 때문에 손가락을 사용해왔다는 것을 알 수 있습니다.
10진법을 표현하는 법을 알아보겠습니다.
다음의 숫자는 무슨 뜻일까요?
253
말 그대로 253? 설명이 필요없겠지만 의미를 해석해보겠습니다.
자리수(digit) 개념은 모든 base 시스템에 적용됩니다. 오른쪽에 있는 것이 가장 작은 단위죠.
253에서는 3 세개가 있고 5는 10개의 뭉텅이가 다섯개, 2는 10개의 뭉텅이를 10개 넣은 100개가 두개 있습니다.
3 +
5 x 10 +
2 x 100
= 3 + (5 x 10) + (2 x 100)
실제 뜻은 이겁니다.
그러니까 10진법이란 것은 10개를 하나의 묶음으로 만드는 시스템, 그게 10개를 10개 묶음으로 하던 10개의 10개를 10개 묶음으로 하건 무한대로 가능합니다.
한편 정수를 벗어날 수도 있는데 1을 만들기 위한 십진법은? 정답은 1을 10개로 쪼갠 0.1입니다.
0.1 x 10 = 1
인 것은 여전히 10진법입니다.
이것을 이진법과 비교해보면,
1 은 1이고 1을 이진법 10개(2)로 쪼개면 0.1 입니다. 이진수 1을 2개로 나누면 십진수로는? 0.5입니다. 반이니까. 이진수 0.1은 1을 반으로 나눈 것을 의미합니다.
평생 십진수만 써왔다면 조금 헷갈릴 수 있습니다. 10진법은 정수에서 그렇듯이 소수에서도 좀더 세밀하게 나눌 수 있습니다. 이런 부분이 장점입니다.
한 가지만 더 보면 3진법 1을 3진법 10으로 나누면 어떨까요? 3진법 10은 10진수 3입니다. 즉 1을 세개로 나눕니다. 결과는 3진법 0.1이고 십진법으로 0.333333…. 무한히 되풀이 되는 순환소수가 됩니다.
여기까지 이해했다면 진법 시스템의 본질에 접근할 수 있습니다.
10진법의 제곱
제곱은 자리수를 나타내는 내용이지만 결국은 풀어쓰는 것과 똑같습니다. 하지만 자리를 아낄 수 있어서 0을 더 적게 써도 되는 장점이 있습니다.
54702 라는 숫자를 제곱으로 표현해 보겠습니다. 일단 자리수를 따져봐야죠. (^는 제곱 표시이다)
(2 x 1) +
(0 x 10) +
(7 x 10^2) +
(4 x 10^3) +
(5 x 10^4)
= (5 x 10^4) + (4 x 10^3) + (7 x 10^2) + (0 x 10) + (2 x 1)
= (5 x 10^4) + (4 x 10^3) + (7 x 10^2) + 2
54702는 위의 계산을 단순하게 줄여서 붙인 것 입니다. 당연한 건데 다른 진법을 계산도 똑같습니다.
2진법 1010은
(0 x 1) +
(1 x 2) +
(0 x 2^2) +
(1 x 2^3)
= (1 x 2^3) + (0 x 2^2) + (1 x 2) + (0 x 1)
= 8 + 2 = 10
이진법 방식으로는
(1 x 10^3) + (0 x 10^2) + (1 x 10) + (0 x 1)
= 1000 + 10 = 1010
이렇게 나오겠지요. 여기서 중요한 건 digit – 자리수가 제곱으로 표현 된다는 점입니다. 10^3은 0이 세개 있다는 것을 말합니다.
정리
십진법은 너무 당연하다고 생각하기 때문에 오히려 그 진가와 원리를 잊고 사는 일이 많습니다. 다만 조금 더 깊이를 더하기 위해서 알았던 것도 다시 한번 들춰보는 것도 도움이 됩니다. 원리를 이해하면 나머지 의문들은 자연히 풀리게 되어 있습니다.