일반적으로 수를 계산할 때 인간은 10진수를 사용합니다. 그래서 10진수가 너무나도 자연스럽게 느껴지겠지만 아마 인간의 손가락이 8개였다면 8진수를 쓰지 않았을까 생각합니다. 물론 16개의 손가락이었다면 16진수가 자연스러울 지도 모르겠죠.
왜냐면 인간이 사용하는 10진수는 꽉 채워진 수가 10임을 의미하며 손가락을 총 동원하여 셀수 있는 숫자가 10인 것과 관련이 있습니다. 이렇게 꽉 채워진 수는 한자리 윗 자릿수로 올림이 발생합니다.
그런데 10진수의 10은 이미 자릿수가 하나 올라가 있습니다. 왜냐면 인간은 애초에 10진수를 근간으로 수를 사용해왔기 때문에 10을 의미하는 하나로 된 숫자는 없기 때문이다. 구체적으로 0 부터 9까지의 숫자는 하나의 숫자로 표현되지만 9 다음의 수는 자리수를 하나 올림으로써 1과 0으로 표현하기 때문입니다.
이와 같은 맥락으로 2진수는 1과 0으로만 수를 표현하므로 1다음의 수에서 자리올림이 발생합니다. 따라서 1, 2, 3, 4를 2진수로 변환하면 1, 10, 11, 100 이렇게 되는 것이죠.
주의할 것은 우리가 10을 말할 때 특별한 언급이 없으면 9다음의 수 10을 의미하지만 애초에 인간의 손가락이 8개였다면 0부터 7까지의 숫자를 사용하는 수 체계를 10진수라고 했을겁니다.
8진수의 10 역시 7다음의 수이며 16진수의 10은 15(f)다음의 수입니다.
너무 당연한 설명이지만 이렇게 당연한 내용으로부터 학문과 기술은 발전합니다. 그리고 위 내용으로부터 한가지 공통적인 법칙을 끄집어 낼 수 있습니다.
① x진수의 수를 x로 나누면 소수점이 왼쪽으로 1자리씩 이동합니다.
10진수 123을 10으로 나누면 12.3 (몫 : 12, 나머지 : 3)
10진수 12를 10으로 나누면 1.2입니다. (몫 : 1, 나머지 : 2)
2진수 10101을 2로 나누면 1010.1 (몫 : 1010, 나머지 : 1)
2진수 1010을 2로 나누면 101.0 입니다. (몫 : 101, 나머지 : 0)
8진수 67213을 8로 나누면 6721.3 (몫 : 6721, 나머지 : 3)
8진수 6721을 8로 나누면 672.1 입니다. (몫 : 672, 나머지 : 1)
...
② 10진수 A를 x진수 B로 변환했다고 하더라도 A와 B는 같은 크기를 가진 수입니다. 단지 표현 방식만 다른 것이죠.
따라서 A를 x로 나누었을 때의 나머지는 B를 x로 나누었을 때의 나머지와 같습니다.
①번 원리에서 x로 나누었을 때 소수점 이하로 내려가는 수는 나머지를 의미합니다.
②번 원리에서 10진수 A와 2진수 B가 같은 수일 때 A를 2로 계속 나누어 나머지를 구하는 것은 B를 2로 계속 나누어 나머지를 구하는 것과 같습니다.
다음 그림을 보세요.
10진수 7과 2진수 111은 같은 수 입니다. 이 두를 2로 나눈 후 또 다시 그 몫을 다시 2로 나누고 몫이 0이 될 때까지 이 작업을 반복해 보겠습니다. 어짜피 10진수 7과 2진수 111은 같은 수이므로 위와 같이 몫을 계속 2로 나눌 때 나머지의 패턴이 동일합니다.
이 때 ①에서 설명했듯이 x진수를 x로 나누면 1의 자리의 숫자가 나머지로 추출 됩니다. (현재 나누어지는 수의 LSD가 추출된다.)
즉 2로 나눌 때 마다 1의 자리수 추출(나머지), 원래의 숫자에서 소수점 왼쪽으로 이동의 패턴을 반복하므로 결국 마지막에 추출되는 나머지는 x진수의 제일 왼쪽의 숫자(MSD : Most Significant Digit), 제일 처음에 추출되는 나머지는 x진수의 가장 오른쪽의 숫자(LSD : Least Significant Digit)가 됩니다.
문제) 1330을 2진수로 변환해 보자.
1330을 더 이상 나누어지지 않을 때까지 2로 나누었습니다. 화살표 방향의 순서로 숫자를 적어본 후 계산기로 계산한 2진수의 값과 동일한지 확인했습니다.
음의 10진수나 정수가 아닌 실수를 2진수로 바꾸는 방법은 여기 를 참고하시길 바랍니다.