(컴퓨터공학입문) 005. 진수 변환

진수 변환

2진수와 10진수 그리고 2^n 진수간의 변환에 대해 살펴보자.

10진수로 변환

8진수 12.34를 10진수로 변환해보자.

이전 포스팅에서 보았듯이, 8진수 12.34는 아래와 같이 나타낼 수 있다.

12.34(8)=1×81+2×80+3×81+4×82=8+2+3×18+2×182=8+2+0.375+0.03125=10.406251012.34_{(8)} \\ = 1 \times 8^1 + 2 \times 8^0 + 3 \times 8^{-1} + 4 \times 8^{-2} \\ = 8 + 2 + 3 \times \cfrac{1}{8} + 2 \times \cfrac{1}{8^2}\\ = 8 + 2 + 0.375 + 0.03125\\ = 10.40625_{10}

이번엔 16진수 AB.12를 10진수로 변환해보자.

AB.12(8)=A×161+B×160+1×161+2×162=10×161+11×160+1×161+2×162=160+11+1×116+2×1162=160+11+0.0625+0.0078125=171.070312510AB.12_{(8)} \\ = A \times 16^1 + B \times 16^0 + 1 \times 16^{-1} + 2 \times 16^{-2} \\ = 10 \times 16^1 + 11 \times 16^0 + 1 \times 16^{-1} + 2 \times 16^{-2} \\ = 160 + 11 + 1 \times \cfrac{1}{16} + 2 \times \cfrac{1}{16^2} \\ = 160 + 11 + 0.0625 + 0.0078125 \\ = 171.0703125_{10}

10진수를 2진수로 변환

10진수 12.6875를 2진수로 변환해보자.

이때 정수부와 소수부를 나누어서 변환해야 한다.

먼저 12를 계속해서 2로 나누어가다가 나머지가 2미만이 되면 그 수를 최대 자리로 하면 된다.

12(10)12=6×206=3×203=1×21112_{(10)} \\ 12 = 6 \times 2 \cdot\cdot\cdot 0 \\ 6 = 3 \times 2 \cdot\cdot\cdot 0 \\ 3 = 1 \times 2 \cdot\cdot\cdot 1 \\ 1

여기서 나머지들을 역순으로 하면 아래와 같이 2진수가 된다.

12(10)=1100(2)12_{(10)} = 1100_{(2)}

소수부의 경우 2로 나누는 것이 아니라 2를 곱해나간다.

계속해서 곱해나가면서 정수부로 진입하는 숫자가 2진수의 소수부가 된다.

이때 정수부를 제거하고 계속해서 2를 곱한다.

0.6875(10)0.6875×2=1.37510.375×2=0.7500.75×2=1.510.5×2=110.6875_{(10)} \\ 0.6875 \times 2 = 1.375 \cdot\cdot\cdot 1 \\ 0.375 \times 2 = 0.75 \cdot\cdot\cdot 0 \\ 0.75 \times 2 = 1.5 \cdot\cdot\cdot 1 \\ 0.5 \times 2 = 1 \cdot\cdot\cdot 1

이때는 역순으로 하지않고 순서대로 변환한다.

0.6875(10)=0.1011(2)0.6875_{(10)} = 0.1011_{(2)}

이제 정수부와 소수부를 합치면 아래와 같은 결과가 나온다.

12.6875(10)=1100.1011(2)12.6875_{(10)} = 1100.1011_{(2)}

2진수를 8진수, 16진수로 변환

8진수와 2진수를 잘 살펴보면 2진수 3개가 8진수 1개로 묶인다는 점을 발견할 수 있다.

8=238 = 2^3

위의 식을 보면 단박에 이해할 수 있을 것이다.

표로 나타내면 아래와 같다.

2진수 8진수
000 0
001 1
010 2
011 3
100 4
101 5
110 6
111 7

위에서 예시로 쓰인 값을 8진수로 변환해보자.

12.6875(10)=1100.1011(2)12.6875_{(10)} = 1100.1011_{(2)}

이때도 정수부와 소수부로 나누어 원점을 기준으로 3자리씩 분할한다.

먼저 정수부 1100은 1과 100으로 분할하여 값을 확인해보자.

1(2)=1(8)100(2)=4(8)1100(2)=14(8)1_{(2)} = 1_{(8)} \\ 100_{(2)} = 4_{(8)} \\ 1100_{(2)} = 14_{(8)}

그 다음은 소수부이다.

소수부 1011은 101과 1로 분할된다.

101(2)=5(8)100(2)=4(8)0.1011(2)=54(8)101_{(2)} = 5_{(8)} \\ 100_{(2)} = 4_{(8)} \\ 0.1011_{(2)} = 54_{(8)}

정수부와 소수부를 합치면

12.6875(10)=1100.1011(2)=14.54(8)12.6875_{(10)} = 1100.1011_{(2)} = 14.54_{(8)}

위와 같이 변환됨을 확인할 수 있다.

16진수도 마찬가지로 4자리씩 묶어서 동일하게 변환하면 된다.

아래 표를 참고하자.

2진수 16진수
0000 0
0001 1
0010 2
0011 3
0100 4
0101 5
0110 6
0111 7
1000 8
1001 9
1010 A
1011 B
1100 C
1101 D
1110 E
1111 F