진수 변환
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출력됨
'개발 영차영차 공부 영차영차' 카테고리의 다른 글
CSS 카드 위에 마우스 올리면 카드가 움직이고 반짝 거리는 효과를 내보자. (0) | 2024.02.06 |
---|---|
유클리드 호제법을 이용한 최대공약수, 최소공배수 구하기 (python) (0) | 2024.01.31 |
python divmod() 사용하기 (1) | 2024.01.29 |