안녕하세요. 컴퓨터를 공부하고 있는 학생입니다.
제가 배웠던 것을 정리해서 블로그로 올려보려고 하는데
많은 분들과 함께 지식을 나누는 지식 창고가 되었으면 좋겠습니다.
응용 수학 창고에서 제가 나눌 내용은 컴퓨터에 사용되는 수학 이론들입니다.
오늘은 그 첫 번째 순서로 진법 이론에 대해서 이야기를 해보도록 하겠습니다.
컴퓨터를 사용할 때 가장 많이 쓰이는 진법은 2진법, 8진법, 10진법, 그리고 16진법입니다.
하지만 8진법과 16진법은 주로 2진법의 가독성을 높여주기 위한 도구로 사용되기 때문에
사실상 2진법과 10진법을 사용한다고 보시면 됩니다.
그럼 시작해볼까요??
우리가 일상에서 사용하는 10진수는 0에서 9까지의 숫자를 표기할 수 있는 시스템입니다.
모두 아시겠지만 2진수는 0과 1을 표기할 수 있죠.
그럼 8진수와 16진수는 어떤 숫자 범위를 표기할 수 있을까요??
8진수는 0부터 7까지, 16진수는 0부터 15까지 표기할 수 있습니다.
한편, 16진수에서 10 이상의 숫자를 10, 11, 12 이런식으로 표기하면
10진수와 헷갈릴 수 있기 때문에 16진수에서 10부터 15까지는 A, B, C, D, E, F로 표기합니다.
N진수 → 10진수 (정수)
N진법에서 10진법으로 바꾸는 방법은 다음과 같습니다.
$ \mathbf{(1234)_{N} = ({\color{Red} 1}\times N^{3}+{\color{Red} 2}\times N^{2}+{\color{Red} 3}\times N^{1}+{\color{Red} 4}\times N^{0})_{10}} $
예를 들어볼까요??
$ (1011)_{2} = (1\times 2^{3}+0\times 2^{2}+1\times 2^{1}+1\times 2^{0})_{10}=(11)_{10} $
$ (3715)_{8} = (3\times 8^{3}+7\times 8^{2}+1\times 8^{1}+5\times 8^{0})_{10}=(1,997)_{10} $
$ (ACE)_{16} = (10\times 16^{2}+12\times 16^{1}+14\times 16^{0})_{10}=(2,766)_{10} $
맨 처음 자릿수에 대한 지수를 0으로 잡고 자릿수가 올라갈 수록 지수가 1씩 올라갑니다.
그럼 소수점이 붙어있으면 어떻게 될까요??
N진수 → 10진수 (실수)
소수점이 있는 N진법에서 10진법으로 바꾸는 방법은 다음과 같습니다.
$ \mathbf{(1234.567)_{N} = ({\color{Red} 1}\times N^{3}+{\color{Red} 2}\times N^{2}+{\color{Red} 3}\times N^{1}+{\color{Red} 4}\times N^{0}+{\color{Red} 5}\times N^{-1}+{\color{Red} 6}\times N^{-2}+{\color{Red} 7}\times N^{-3})_{10}} $
예를 통해서 자세히 알아보겠습니다.
$ (1011.011)_{2} = (1\times 2^{3}+0\times 2^{2}+1\times 2^{1}+1\times 2^{0}+0\times 2^{-1}+1\times 2^{-2}+1\times 2^{-3})_{10}=(11.375)_{10} $
$ (3715.12)_{8} = (3\times 8^{3}+7\times 8^{2}+1\times 8^{1}+5\times 8^{0}+1\times 8^{-1}+2\times 8^{-2})_{10}=(1,997.15625)_{10} $
$ (ACE.BC)_{16} = (10\times 16^{2}+12\times 16^{1}+14\times 16^{0}+11\times 16^{-1}+12\times 16^{-2})_{10}=(2,766.734375)_{10} $
맨 처음 자릿수에 대한 지수를 0으로 잡고 자릿수가 올라가면 지수가 1씩 올라가고
소수점 밑으로 내려가면 지수가 1씩 내려갑니다.
그럼 이제 10진수를 N진수로 바꾸는 법에 대해서 알아보겠습니다.
10진수 → N진수 (base N) (정수부분)
10진수를 N진수로 바꿀 때는 정수부분과 소수부분을 나눠서 계산해야합니다.
먼저 정수부분부터 알아보도록 하겠습니다.
10진수의 정수부분을 N진수로 바꿀 때에는 주어진 10진수를 N으로 계속 나눠주면 되는데
몫이 0이 나올때까지 계속 나누고 나머지를 기록하면 됩니다.
예를 들어볼까요?
$ (42)_{10} $ → 2진수
$$ 42\div 2\rightarrow {\color{Blue} 2\color{Blue}1}/{\color{Red} 0} $$
$$ 21\div 2\rightarrow {\color{Blue} 1\color{Blue}0}/{\color{Red} 1}$$
$$ 10\div 2\rightarrow {\color{Blue} 5}/{\color{Red} 0}$$
$$ 5\div 2\rightarrow {\color{Blue} 2}/{\color{Red} 1}$$
$$ 2\div 2\rightarrow {\color{Blue} 1}/{\color{Red} 0}$$
$$1\div 2\rightarrow {\color{Blue} 0}/{\color{Red} 1}$$
2진수로 바꾸는 것이기 때문에 주어진 10진수인 42를 2로 계속 나눠주면 됩니다.
위의 예시에서 파랑색 글씨처럼 몫이 0이 될 때까지 2로 계속 나눠주면 됩니다.
그러고 나서 빨강색으로 표현된 나머지를 밑에서부터 위로 적어주면 됩니다.
맨 밑에 있는 나머지가 제일 큰 자릿수가 되는 것입니다.
따라서 정답은 다음과 같습니다.
$$ (42)_{10}=(101010)_{2} $$
예시를 하나 더 볼까요??
$ (2748)_{10} $ → 16진수
$$2748\div 16\rightarrow {\color{Blue} 1\color{Blue}7\color{Blue}1}/{\color{Red} 0\color{Red}.\color{Red}7\color{Red}5\color{Red}\times \color{Red}1\color{Red}6\color{Red}=\color{Red}1\color{Red}2\color{Red}=\color{Red}C}$$
$$171\div 16\rightarrow {\color{Blue} 1\color{Blue}0}/{\color{Red} 0\color{Red}.\color{Red}6\color{Red}8\color{Red}7\color{Red}5\color{Red}\times \color{Red}1\color{Red}6\color{Red}=\color{Red}1\color{Red}1\color{Red}=\color{Red}B}$$
$$10\div 16\rightarrow {\color{Blue}0}/{\color{Red} 1\color{Red}0\color{Red}=\color{Red}A}$$
$$\therefore (2748)_{10}=(ABC)_{16}$$
16진수로 바꾸는 것이기 때문에 몫이 0이 될 때까지 주어진 10진수를 16으로 계속 나눠주면 되는데
처음으로 2748을 16으로 나누면 171.75가 나옵니다.
여기서 정수부분인 171이 몫이 되고
소수부분인 0.75에 16을 곱해주면 12가 나오는데 이 12가 나머지가 됩니다.
또 12는 16진법으로 C이기 때문에 C로 표기하시면 됩니다.
10진수 → N진수 (base N) (소수부분)
이제 10진수의 소수 부분을 N진수로 바꾸는 방법을 알아보도록 하겠습니다.
정수부분을 바꿀 때는 N으로 계속 나눠줬지만
소수부분을 바꿀 때는 결과값이 정수가 나올떄까지 N으로 계속 곱해주면 됩니다.
그러고 나서 곱한 결과값의 정수부분만 기록하면 됩니다.
그리고 정수부분을 바꿀 때는 밑에서 위로 올라가면서 기록했지만
소수부분을 바꿀 때는 반대로 위에서 아래로 내려가면서 기록하면 됩니다.
예를 통해서 살펴보도록 하겠습니다.
$(0.375)_{10}\rightarrow base2$
$0.375\times 2 = {\color{Red} 0}.75\rightarrow{\color{Blue} 0}$
$0.75\times 2 = {\color{Red} 1}.5\rightarrow{\color{Blue} 1}$
$0.5\times 2 = {\color{Red} 1}\rightarrow{\color{Blue} 1}$
2진수로 바꾸는 것이기 때문에 주어진 10진수에 2를 계속 곱하면 됩니다.
처음으로 0.375에 2를 곱하면 0.75가 나오는데 여기서 정수부분은 0이 나오기 때문에
0.75에 또 2를 곱해주면 됩니다.
그러면 1.5가 나오는데 정수부분인 1을 빼주고
0.5에 다시 2를 곱해주면 딱 1이 나오게 됩니다.
이것을 위에서 아래로 차례대로 작성하면 됩니다.
따라서 정답은 다음과 같습니다.
$$(0.375)_{10}=(0.011)_{2}$$
예시를 하나 더 살펴보겠습니다.
$(0.15625)_{10}\rightarrow base8$
$0.15625\times 8 = {\color{Red} 1}.25\rightarrow{\color{Blue} 1}$
$0.25\times 8 = {\color{Red} 2}\rightarrow{\color{Blue} 2}$
$$\therefore(0.15625)_{10}=(0.12)_{8}$$
그럼 이제 정수부분과 소수부분을 한꺼번에 바꿔볼까요??
$(69.0625)_{10}\rightarrow base16$
----- 정수 부분 -----
$69\div 16=4.3125\rightarrow 4/ {\color{Red} 5}$
$4\div 16\rightarrow 0/ {\color{Red} 4}$
----- 소수 부분 -----
$0.0625\times 16= {\color{Red} 1}$
$\therefore(69.0625)_{10}=(45.1)_{16}$
위와 같이 정수부분과 소수부분을 나눠서 계산하면 됩니다.
정수부분은 바꾸고자 하는 진수 숫자로 나눈 후에 나머지를 아래에서 위로 읽으면 되고
소수부분은 바꾸고자 하는 진수 숫자를 곱한 후에 결과값의 정수 부분을 위에서 아래로 읽으면 됩니다.
오늘은 여기까지 하도록 하겠습니다.
다음 시간에는 2진수와 다른 진수와의 관계와 진수의 사칙연산에 대해서 배워보겠습니다.
다음시간에 만나요~~