Coding Log

004. 진수 변환

2017.06.21 19:31 - NamhoonKim NE_Leader


진수 변환

숫자를 10진수, 2진수, 8진수, 16진수로 표현할 수 있는 만큼 진법들 간의 변환도 당연히 가능하다.

N진수의 10진수 변환

1001_{(2)} = 1 * 2^3 + 0 * 2^2 + 0 * 2^1 + 1 * 2^0

위와 같은 2진수를 10진수로 변환해보자.

1001_{(2)} = 1 * 2^3 + 0 * 2^2 + 0 * 2^1 + 1 * 2^0
\;\;\;\;\;\;\;\;\;\;\;\, = 1 * 8 + 0 * 4 + 0 * 2 + 1 * 1
\;\;\;\;\;\;\;\;\;\;\;\, = 8 + 0 + 0 + 1
\;\;\;\;\;\;\;\;\;\;\;\, = 9

위의 절차를 보면 2진수가 8진수로 어떻게 변환되는 지 알 수 있을 것이다.

마찬가지 원리인 8진수 16진수도 확인해보자.

123_{(8)} = 1 * 8^2 + 2 * 8^1 + 3 * 8^0
\;\;\;\;\;\;\;\;\;\: = 1 * 64 + 2 * 8 + 3 * 1
\;\;\;\;\;\;\;\;\;\: = 64 + 16 + 3
\;\;\;\;\;\;\;\;\;\: = 83

AB123_{(16)} = A * 16^4 + B * 16^3 + 1 * 16^2 + 2 * 16^1 + 3 * 16^0
\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\, = A * 65536 + B * 4096 + 1 * 256 + 2 * 16 + 3 * 1
\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\, = 10 * 65536 + 11 * 4096 + 1 * 256 + 2 * 16 + 3 * 1
\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\, = 655360 + 45056 + 256 + 32 + 3
\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\;\, = 700707

10진수의 N진수 변환
2진수, 8진수, 16진수를 10진수로 변환할 수 있듯 10진수 또한 반대로 변환할 수 있다.

10진수를 변환하고 싶은 진법의 수로 나눠주면 된다. 아래 예시를 통해 이해해보자.

9 / 2 = 4\; ...\; 1
4 / 2 = 2\; ...\; 0
2 / 2 = 1\; ...\; 0

더 이상 나눌 수 없을 때까지 나눈 후 마지막 몫을 포함해 나머지를 역순으로 나열하면 1, 0, 0, 1이 된다.

따라서 9 = 1001_{(2)}가 된다.

8진수와 16진수도 마찬가지 방식으로 진행된다.

83 / 8 = 10 \;...\; 3
10 / 8 = 1\;\;\;...\; 2

10진수 83은 123_{(8)}로 표현할 수 있다.

700707 / 16 = 43794 \;...\; 3
43794 / 16 \;\,= 2737 \;\;\;...\; 2
2737 / 16 \;\,\;\,= 171 \;\;\;\;\;...\; 1
171 / 16 \;\,\;\,\;\,= 10(A) \;\,...\; 11(B)

10진수 700707은 AB123_{(16)}로 표현할 수 있다.

2진수의 8진수, 16진수 변환

2^3 = 8
2^4 = 16

위의 식을 보면 어떤 규칙이 보이는가?

2진수는 0과 1로 표현하는 진법이다.

즉 2진수 3자리는 2^{(n+2)} + 2^{(n+1)} + 2^n 로 구성될 수 있고 마찬가지로 2진수 4자리는 2^{(n+3)} +2^{(n+2)} + 2^{(n+1)} + 2^n으로 구성될 수 있다.

즉 2진수를 3비트, 4비트 단위로 묶어서 8진수와 16진수로 변환이 가능하다.

예를 들어 2진수 111001101011_{(2)}가 있다고 하자.

이를 3비트 단위로 쪼개면 아래와 같이 된다.

111 001 101 011_{(2)} = 111_{(2)} 001_{(2)} 101_{(2)} 011_{(2)}
쪼개진 111_{(2)}001_{(2)}101_{(2)}011_{(2)} 을 각각 8진수로 변환하면
111_{(2)} = 4 + 2 + 1 =7
001_{(2)} = 1
101_{(2)} = 4 + 1 = 5
011_{(2)} = 2 + 1 = 3

이고

이는 7153_{(8)}로 표현할 수 있다.

이번엔 같은 2진수를 16진수로 나타내보자.

1110 0110 1011_{(2)} = 1110_{(2)} 0110_{(2)} 1011_{(2)}

위와 같이 쪼갤 수 있고

1110_{(2)} = 8 + 4 + 2 = 14(E)
0110_{(2)} = 4 + 2 = 6
1011_{(2)} = 8 + 2 + 1 = 11(B)

이는 E6B_{(16)}으로 나타낼 수 있다.

컴퓨터의 데이터 표현

오늘날의 컴퓨터는 모든 데이터를 2진수 형식으로 표현한다.

초기 컴퓨터에서는 인간과 똑같이 10진수로 표현을 했으나 고비용의 장치가 필요했으며, 연산 처리 능력과 안전성이 저하되고 문제가 있어 2진수로 모든 정보를 표현하게 되었다.

DISQUS 로드 중…
댓글 로드 중…

트랙백을 확인할 수 있습니다

URL을 배껴둬서 트랙백을 보낼 수 있습니다