뜌릅
디지털 논리 (1)- Conversion 본문
10진수를 타진수로 변환하거나, 반대로 타진수들을 10진수로 변환하는 것을 공부하였다.
10진수가 아닌 진수를 10진수가 아닌 진수로 변환하는 법은 위의 방법들을 안다면, 타진수를 10진수로 변환한다음, 그 10진수를 타 진수로 변환시키면 된다.
그러므로 10진수를 타진수로 변환하거나 타진수들을 10진수로 변환하는 방법에 대해서만 설명하겠다.
R진수를 10진수로 변환시키는 방법
R진수를 10진수로 변환시키는 법은 매우 간단하다. R진수의 각 자리의 수에 단순히 Radix의 거듭제곱값을 곱해주면 된다. 근데 이렇게 말하면 이해가 안될태니, 예시를 보자.

위의 그림처럼 2진수의 각 자리의 수에 단순히 Radix의 거듭제곱값을 곱해주면 10진수의 값이 나오게 된다.
10진수를 R진수로 변환시키는 방법
변환시키는 방법을 수업시간에 배우게 되었는데, 정수부분과 소수부분 두개를 분리해서 변환시켜야 된다는 것이다.
먼저 정수부분은 변환시킬려는 해당 Radix로 나누면서 나오는 몫(Quotient) 그리고 나머지(Remainder)에 집중해야 한다.
몫의 값이 0이 될때까지 Radix값으로 나누게 되는데, 그때마다 나오는 나머지의 값들을 역순으로 배치한것이 R진수변환값이 된다.

위의 그림처럼 N을 10진수이라고 하고 R진수로 변환시킨 값들의 각 자리수가 an,an-1, ...... , a2,a1,a0라고 했을때 위글에서 설명한것 처럼, 거듭제곱꼴로 나타낼수 있게 된다. 여기가 핵심인데 위의 식을 R로 나누면 a0가 나올것이고, 또 몫을 R로 나누면 a1이 나올것이다. 그리고 나오는 나머지값들의 역순이 위 그림의 (a(n)a(n-1)........a(2)a(1)a(0))이 된다.

설명한대로의 계산과정을 보여주는데, 이를 통해 나머지의 역순이 해당진수의 정수부분 변환법이 됨을 알수있다.
정수부분 변환법을 알게 되었다.
소수부분도 기본 원리는 똑같다. 소수부분은 R을 곱하고 나오는 정수부분은 빼내면서 계속해서 소수부분이 결국 사라질때까지 곱한다. 이렇게 해서 나오는 정수부분이 R진수의 소수부분 변환값이 된다.

위의 그림처럼 10진수를 R의 제곱값으로 표현했고, R을 곱할때마다 나오는 정수부분들이 변환값이 됨을 알수있다.
이렇게 해서 진수변환법을 알게 되었다.
심심하면 변환법을 코딩해보자. 아래는 10진수를 2부터 16진수까지 변환할수 있는 코드이다. 파이썬으로 코딩했다.
#-*- encoding: utf-8 -*-
import math
def ABCDEF(x) :
if(x == 10): return "A"
elif(x == 11):return "B"
elif(x == 12):return "C"
elif(x == 13):return "D"
elif(x == 14):return "E"
elif(x == 15):return "F"
else : return x
def run() :
decimal_number = float(input("십진수를 입력하시오. >>>"))
radix = int(input("Radix를 입력하시오. >>>"))
num = int(decimal_number)
flo = round(decimal_number-num,10)
#정수부분 처리
list_n = []
q =num
while q != 0 :
q,r = divmod(q,radix)
list_n = [r] + list_n
#소수점 처리
list_f = []
r = flo
i=6
while i :
r *= radix
list_f += [math.trunc(r)]
r -= math.trunc(r)
i -=1
for x in list_n:
i = ABCDEF(x)
print(i,end = '')
print(".",end='')
for x in list_f:
i = ABCDEF(x)
print(i,end = '')
return 0
run()