관리 메뉴

개발자비행일지

파이썬으로 10진법에서 2진법 16진법 으로 변경하기 본문

▶ Python

파이썬으로 10진법에서 2진법 16진법 으로 변경하기

Cyber0946 2020. 3. 22. 14:46

먼저 알고리즘은 다음과 같다. 

입력으로 10진수를 받고, 이 10진수를 2로 계속 나누어서, 몫이 1이 될 때 까지 모듈러 2 연산의 나머지 값을 활용한다.

모듈러 2 연산을 할 때 결과는 0 또는 1인데, 이 결과 값을 2진수의 최하의 비트 부터 채워주는 것이다. 

예를 들어 

200을 2진수로 변경 할 때,

200%2 = 0 이고 몫은 100이 된다. 

그럼 2의 0에 해당 하는 최하위 비트는 0 이된다. 

그 다음으로 

100%2를 수행하고, 이 때 값은 0이 되고 몫은 50이 된다. 

그러면 2진수로 바꾸엇을 때의 비트는 00이 된다. 

다시 수행하면

50%2의 값은 0이 되고 몫은 25가 된다. 

그러면 하위 비트 부터 최상위 비트 까지는 000이 된다. 

25%2의 값은 1이 되고, 몫은 12가 된다. 

그러면 비트는 1000이 된다. 

12%2의 값은 0이 되고, 몫은 6이 된다. 

그러면 비트는 01000이 된다. 

6%2의 값은 0이 되고, 몫은 3이 된다. 

그러면 비트는 001000이 된다.

3%2의 값은 1이고, 몫은 1이 된다. 

그러면 비트는 1001000이된다. 

마지막으로 최상위 비트에 1을 추가해 준다. 그러면 

200이라는 십진수는 11001000(2)가 된다.

이걸 파이썬으로 구현하면 다음과 같다. 

def binary(a):
    hex = {'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'}
    print(hex)
    l= list()
    l_h = list()
    s1= ""
    s2= ""
    while(a != 0):
        r=a%2
        l.append(r)
        a = a//2
    l.reverse()
    print(l)
    s1 = list_to_string(l)
    print(s1)
    print(l)
    for i in range(0,len(l),4):
        print(i)
        l_h.append(hex[s1[i:i+4]])
        print(l_h)
    s2 = list_to_string(l_h)
    print(s2)
    
def list_to_string(list):
    s=""
    for i in range(len(list)):
        s += str(list[i])
    return s

그 다음 함수로 바꿔줄 부분을 바꿔주면 다음과 같다. 

def binary(a):
    hex = {'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'}
    print(hex)
    l= list()
    l_h = list()
    s1= ""
    s2= ""
    while(a != 0):
        r=a%2
        l.append(r)
        a = a//2
        
    l.reverse()
    s1 = list_to_string(l)
    print_binary(s1)
    l_h = hex_slice(l,l_h,s1,hex)
    s2 = list_to_string(l_h)
    print_hex(s2)
    
def list_to_string(list):
    s=""
    for i in range(len(list)):
        s += str(list[i])
    return s

def hex_slice(list1,list2,string,dict):
    for i in range(0,len(list1),4):
        list2.append(dict[string[i:i+4]])
    return list2
def print_binary(string):
    print(string+"(2)")
    
def print_hex(string):
    print("0x"+string)
    

 

'▶ Python' 카테고리의 다른 글

파이썬 부등식  (0) 2020.07.07
파이참 단축키  (0) 2020.07.07
파이썬 함수2  (0) 2018.12.24
파이썬 함수1  (0) 2018.12.24
파이썬으로 브루트포스 조합생성기 만들기  (0) 2018.12.13