DIY를 위한 AI

2022년 8월 6일 토요일

진법과 변환 (Notion(Base) with conversion)

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)으로 표현할 수 있으며 이를 계산하면 1642010으로 위의 표와 같다는 것을 알 수 있다.

  10
진수를 2진수로 변환할 때 보통 2를 반복적으로 나눗셈하는 방식을 사용하는데 123102진수로 변환하려면 다음과 같이 한다.
  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
64105910
  3210 : 5910-3210
2710
  1610 : 2710-1610
1110
  810 : 1110-810
310
  410 :
감산 불가
  210 : 310-210
110
  110 : 110-110
010

 

12810

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이 아닌 자릿수인 27262221만 더하는 것으로 끝난다. , 12810641041021019810이 된다.

 

4. 진법의 변환 - 10진수와 16진수의 사이

10진수를 2진수와 변환할 때의 방법을 10진수를 16진수로 변환할 때도 같은 방법을 사용할 수 있으나 두 자릿수 나눗셈보다 2진수로 변환한 후 16진수로 재차 변환하는 것이 편하므로 생략한다.
  16
진수를 10진수로 변환할 때도 거듭제곱에 대한 표기법으로 쓸 수 있으나 두 자릿수 곱셈이 자주 나와 불편한 반면에 2진수를 거쳐 계산하는 쪽이 편하므로 생략한다.
  
결론적으로 할 수는 있지만 잘 안 하는 변환이다.

 

5. 진법의 변환 - 2진수와 16진수의 사이

2진수와 16진수사이에는 ‘2진수 4자리=16진수 1자리라는 공식이 있다. 사실, 2416이라 당연히 그렇게 되는데 11110112라는 수를 변환하는 과정은 아래와 같다.
  
처음으로, 1의 자리부터 4자리씩 끊어 놓는다. , 111, 1011111210112이 된다.
 
그 네 자릿수의 숫자를 각각 16진수로 비교표에 따라 변환하여 이어서 쓴다. , 7B16가 된다.

 

1

1

1

1

0

1

1

7

B

 

16진수를 2진수로 변환하는 것 또한 위의 내용을 역순으로 한다. 16진수 C616을 변환한다 할 때, C16616을 각각 네 자리의 2진수로 변환하여 그대로 이어서 쓴다. , 110001102가 된다.

C

6

1

1

0

0

0

1

1

0

 

이렇게 과정이 간단하므로 16개의 대응되는 수만 기억해두면 2진수에서 16진수로, 16진수를 2진수로 즉시 변환이 가능하다.

 

6. 결론

이렇게 직접 계산하는 방법을 알아만 두고, 평소에는 컴퓨터의 계산기나 인터넷상의 변환기를 사용하도록 한다.

댓글 없음:

댓글 쓰기