개발 영차영차 공부 영차영차

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

개발하는 호랑이 2024. 1. 29. 20:40

진수 변환

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출력됨