Skip to content

Latest commit

 

History

History
145 lines (131 loc) · 3.82 KB

진수변환.md

File metadata and controls

145 lines (131 loc) · 3.82 KB

내장함수 사용하여 변경하는 방법


  • 10진수를 2진수로 변환
num = 205
binary_num = bin(num)
print("10진수 -> 2진수: ",binary_num) #0b11001101
  • 10진수를 8진수로 변환
num = 205
print("10진수 -> 8진수: ",oct(num)) #0o315
  • 2진수를 10 진수로 변환
binary_num = "0b11001101"
print("2진수 -> 10진수: ",int(binary_num,2)) #205
  • 2진수를 8 진수로 변환
print("2진수 -> 8진수: ",oct(0b11001101)) #0o315
  • 2진수를 16 진수로 변환
print("2진수 -> 16진수: ",hex(0b11001101)) #0xcd
  • 8진수를 10 진수로 변환
print("8진수 -> 10진수: ",int("0o315",8)) #205

직접 구현하는 방법


  • 10진수를 2진수로 변환
def make_binary(num):
    binary = []
    while num:
        binary.append(str(num%2))
        num = num // 2
    binary.reverse()
    return ''.join(binary)
  • 10 진수를 16진수로 변환
def make_hex(num):
    match = {10:"a",11:"b",12:"c",13:"d",14:"e",15:"f"}
    hex = []
    while num:
        value = num % 16
        if value >= 10:
            hex.append(match[value])
        else:
            hex.append(str(value))
        num = num // 16
    hex.reverse()
    return "".join(hex)
  • 2진수를 10 진수로 변환
def make_decimal(binary_num):
    binary_num = binary_num[::-1] # 문자열 역전시킴 ex 1101 -> 1011
    digit = 1
    decimal = 0
    for i in range(len(binary_num)):
        decimal += digit * int(binary_num[i])
        digit *= 2
    return decimal
  • 2진수를 8진수로 변환 (뒤에서 부터 3개씩 잘라서 더한 값을 각 자리에 더해주기)
def make_octal(binary_num):
    binary_num = list(binary_num)
    oct = []
    count = 0 # 3개씩 더하기 위해 사용
    sum = 0 # 3개의 합을 저장하기 위해 사용
    digit = 1 # 2진수 형태로 더해주기 때문에 첫 digit 값 1이고, 추후 세 개가 더해지면 다시 digit 1로 초기화 진행
    for i in range(len(binary_num)-1,-1,-1):
        count += 1
        sum += digit * int(binary_num[i])
        if count == 3: # 세 개를 더했으면 이를 8진수 값 배열에 더해주고, 나머지 변수 초기화 진행.
            oct.append(str(sum))
            sum = 0
            count = 0
            digit = 1
            continue
        digit *= 2 # 세 개를 더하지 않았으면 계속 2진수 덧셈 진행
    oct.append(str(sum))
    oct.reverse()
    return "".join(oct)
  • 2진수를 16 진수로 변환 (네자리씩 더해주기)
def make_hex_by_binary(binary_num): 
    match = {10:"a",11:"b",12:"c",13:"d",14:"e",15:"f"}
    hex = []
    binary_num = binary_num[::-1]
    digit = 1
    sum = 0 # 네 개마다 더한 값을 저장할 변수
    for i in range(len(binary_num)):
        sum += digit * int(binary_num[i])
        if (i+1) % 4 == 0: # 0부터 시작해서 4개씩 자를 것이므로 나누기 연산을 통해 확인
            if sum >= 10:
                hex.append(match[sum])
            else:
                hex.append(str(sum))
            sum = 0
            digit = 1
            continue
        digit *= 2
    hex.reverse()
    return "".join(hex)
  • 구현한 함수 실행 결과
num = 205
binary_num = make_binary(num)
print(f'10진수인 {num} -> 2진수 변환: {binary_num}')
print(f'2진수 -> 8진수 변환: {make_octal(binary_num)}')
print(f'2진수 -> 10진수 변환: {make_decimal(binary_num)}')
print(f'2진수 -> 16진수 변환: {make_hex_by_binary(binary_num)}')
print(f'10진수인 {num} -> 16진수 변환: {make_hex(num)}')

"""
실행 결과 : 
10진수인 205 -> 2진수 변환: 11001101
2진수 -> 8진수 변환: 315
2진수 -> 10진수 변환: 205
2진수 -> 16진수 변환: cd
10진인 205 -> 16진수 변환: cd
"""