본문 바로가기
개발 영차영차 공부 영차영차

10진수 2진수, n진수의 변환(python)

by 개발하는 호랑이 2024. 1. 29.

진수 변환

10진법의 수를 다른 진법의 수로 바꿀 때, python에서 2진수, 8진수, 16진수로 바꾸는 함수는 아래와 같다.

10진수의 변환

10진수 -> 2진수

bin(123)
>>> 0b1111011

10진수 -> 8진수

oct(123)
>>> 0o173

10진수 -> 16진수

hex(123)
>>> 0x7b

그 외 진법의 수는 안타깝게도 직접 만들어서 작성을 해야 한다.

10진수 -> n진수

함수를 작성해서, 함수(10진법 수, 원하는 진수)를 하면 return 값으로 원하는 진수로 나타낸 값이 나오게 된다.

# 10진수를 n진수로 변환!
def convert_to_base_n(decimal_number, base):
    convert_string = "0123456789ABCDEF"
    if decimal_number < base:
        return convert_string[decimal_number]
    else:
        return convert_to_base_n(decimal_number//base, base) + convert_string[decimal_number%base]
print(convert_to_base_n(15, 16)) # F가 출력됨

n진수의 변환

우리가 익히 알고 있는 int() 함수를 이용하면 쉽게 n진수를 10진수로 변환시킬 수 있다.

int(str(변화시키려는 n진수의 숫자), n진수)

아래의 예처럼 사용하면 된다.

print(int('101', 2))
print(int('202', 3))
print(int('303', 4))
print(int('404', 5))
print(int('505', 6))
print(int('606', 7))
print(int('707', 8))
print(int('808', 9))
print(int('abc', 16))

결과는 아래와 같다.

5
20
51
104
185
300
455
656
2748

n진수의 다른 n'진수로의 변환

앞서 사용한 10진수의 n진수 변환 코드를 이용할 텐데, 방법은 기존 n진수를 10진수로 변환시켜 준 뒤, n' 진수로 변환시켜주는 방법이다.

# 10진수를 n진수로 변환!
def convert_to_base_n(decimal_number, base):
    convert_string = "0123456789ABCDEF"
    if decimal_number < base:
        return convert_string[decimal_number]
    else:
        return convert_to_base_n(decimal_number//base, base) + convert_string[decimal_number%base]

이 방법을 이용해 아래는 6진수를 10진수로 변환한 뒤 9진수로 변환시키는 예시이다.

print(convert_to_base_n(int('12345',6),9))	# 2502출력됨