1. 진법에 대해
진법은 수를 셀 때 자릿수가 변경되는 단위를 특정하여 두는
셈법이다.
예를 들어 평소에 사용하는 수는 0부터 9까지의 10개를 사용하는 10진법이 된다. 하루의 낮과 밤으로 구분하여 12개의 간격을 둔 시간은 12진법이 되고 1시간은 60분, 1분은 60초의
주기를 가지므로 60진법이라 할 수 있다.
사람과 달리 컴퓨터의 경우 전자제품으로써 인식하는 것은 전기가 흐른다(1)와
흐르지 않는다(0)뿐이며 이에 따라 2진법으로 모든
동작을 한다. 다만, 숫자가 커질수록 사람이
읽기 어려울 정도로 길어지는 탓에 2진법의 수를 네 자리마다 하나의 숫자로 변환되는 16진법으로 표기하는 것이 일반적이다. 이에 따라 10진법, 2진법, 16진법
세 가지에 대해 수 체계를 알고 서로 간의 진법변환을 할 수 있어야 한다.
10진법 - 010, 110, 210,
310, 410, 510, 610, 710,
810, 910 (10 개, 이후 1010-1110-1210 순으로
계속.)
2진수, 16진수와의 구분을 위해 뒤의 10을
추가했으나 평소에 쓰는 숫자와 동일하다.
2진법 - 02, 12 (2 개, 이후 102-112-1002 순으로
계속.)
2진수의 구분을 위해 뒤의 2 대신에 0b100처럼 앞에 ‘0b’를 쓰기도 한다.
16진법 - 016, 116, 216,
316, 416, 516, 616, 716,
816, 916, A16, B16, C16,
D16, E16, F16 (16 개, 이후 1016-1116-1216 순으로
계속.)
16진수의 구분을 위해 뒤의 16대신에 0x12처럼 앞에 ‘0x’를 쓰기도 한다.
표로 비교하면 아래와 같다.
10진법 |
010 |
110 |
210 |
310 |
410 |
510 |
610 |
710 |
2진법 |
02 |
12 |
102 |
112 |
1002 |
1012 |
1102 |
1112 |
16진법 |
016 |
116 |
216 |
316 |
416 |
516 |
616 |
716 |
10진법 |
810 |
910 |
1010 |
1110 |
1210 |
1310 |
1410 |
1510 |
2진법 |
10002 |
10012 |
10102 |
10112 |
11002 |
11012 |
11102 |
11112 |
16진법 |
816 |
916 |
A16 |
B16 |
C16 |
D16 |
E16 |
F16 |
10진법 |
1610 |
1710 |
1810 |
1910 |
2010 |
2110 |
2210 |
2310 |
2진법 |
100002 |
100012 |
100102 |
100112 |
101002 |
101012 |
101102 |
101112 |
16진법 |
1016 |
1116 |
1216 |
1316 |
1416 |
1516 |
1616 |
1716 |
2. 진법의 변환 - 10진수를 2진수로
변환에 앞서 각 진법에서의 수는 자릿수가 올라갈 때 진법의
거듭제곱으로 구성된다는 점을 알아야 한다.
예를 들어 10진수 12310이라는
수가 있다면 (110×102)+(210×101)+(310×100)으로 표현된다. 동일한 방법으로 2진수 101002이라는
수를 (12×24)+(02×23)+(12×22)+(02×22)+(02×20)으로 표현할 수 있으며 이를 계산하면 16+4=2010으로 위의 표와 같다는 것을 알 수 있다.
10진수를 2진수로 변환할 때 보통 2를
반복적으로 나눗셈하는 방식을 사용하는데 12310을
2진수로 변환하려면 다음과 같이 한다.
2 )123
2 ) 61······1
2 ) 30······1
2 ) 15······0
2 ) 7······1
2 ) 3······1
2 ) 1······1
0······1
2로 나눈 후 우측에 나머지를 기입하는 것을 몫이 0이 될 때까지 한 후, 기록된 나머지들을 가장 아래부터 순서대로 쓰면 2진수로 변환한 결과로
11110112가 된다.
10진수를 2진수로 변환하는 다른 방법으로 2의
거듭제곱을 빼는 방식이 있는데, 감산 가능한 가장 큰 수부터 빼는 방법이다. 12310으로 하면, 이 보다 작으면서 가장 큰 거듭제곱인 6410부터 뺄셈을 반복하고 뺄 수 있으면 1, 뺄
수 없으면 0으로 기록하고 0이 되도록 반복한다.
12810 : 감산 불가
6410 : 12310-6410=5910
3210 : 5910-3210=2710
1610 : 2710-1610=1110
810 : 1110-810=310
410 : 감산 불가
210 : 310-210=110
110 : 110-110=010
6410 |
3210 |
1610 |
810 |
410 |
210 |
110 |
|
0 |
1 |
1 |
1 |
1 |
0 |
1 |
1 |
계산 결과 동일하게 11110112가 된다.
두 방법 중 어느 쪽이라도 편한 방법으로 익숙해지도록 한다.
3. 진법의 변환 - 2진수를 10진수로
수의 거듭제곱에 대한 표기법을 이해하고 있다면 간단히 진행된다. 2진수 110001102라는 수가 있다면 (12×27)+(12×26)+(02×25)+(02×24)+(02×23)+(12×22)+(12×22)+(02×20)으로 표현되고, 0이 아닌 자릿수인 27+26+22+21만 더하는 것으로 끝난다. 즉, 12810+6410+410+210=19810이 된다.
4. 진법의 변환 - 10진수와 16진수의 사이
10진수를 2진수와 변환할 때의 방법을 10진수를 16진수로 변환할 때도 같은 방법을 사용할 수 있으나 두
자릿수 나눗셈보다 2진수로 변환한 후 16진수로 재차 변환하는
것이 편하므로 생략한다.
16진수를 10진수로 변환할 때도 거듭제곱에 대한 표기법으로 쓸 수 있으나
두 자릿수 곱셈이 자주 나와 불편한 반면에 2진수를 거쳐 계산하는 쪽이 편하므로 생략한다.
결론적으로 할 수는 있지만 잘 안 하는 변환이다.
5. 진법의 변환 - 2진수와 16진수의 사이
2진수와 16진수사이에는 ‘2진수
4자리=16진수 1자리’라는 공식이 있다. 사실, 24=16이라 당연히 그렇게
되는데 11110112라는 수를
변환하는 과정은 아래와 같다.
처음으로, 1의 자리부터 4자리씩
끊어 놓는다. 즉, 111, 1011로 1112과 10112이 된다.
그 네 자릿수의 숫자를 각각 16진수로 비교표에 따라 변환하여 이어서 쓴다. 즉, 7B16가
된다.
|
1 |
1 |
1 |
1 |
0 |
1 |
1 |
7 |
B |
16진수를 2진수로 변환하는 것 또한 위의 내용을 역순으로 한다. 16진수 C616을 변환한다 할 때, C16와 616을 각각 네 자리의 2진수로 변환하여 그대로 이어서 쓴다. 즉, 110001102가 된다.
6 |
|||||||
1 |
1 |
0 |
0 |
0 |
1 |
1 |
0 |
이렇게 과정이 간단하므로 16개의 대응되는 수만 기억해두면 2진수에서 16진수로, 16진수를 2진수로 즉시 변환이 가능하다.
6. 결론
이렇게 직접 계산하는 방법을 알아만 두고, 평소에는 컴퓨터의 계산기나 인터넷상의 변환기를 사용하도록 한다.
댓글 없음:
댓글 쓰기