본문 바로가기
Python

파이썬 진수 변환

by Devwon99

● 10진수 → 2진수


10진수인 임의의 수를 2진수로 변환하려면 아래와 같이 코드를 작성할 수 있다.

n = int(input())
digits = []

while True:
    if n < 2:
        digits.append(n)
        break

    digits.append(n % 2)
    n //= 2


for digit in digits[::-1]:
    print(digit, end="")

임의의 수 n을 입력받고 반복문을 통해 2진수로 변환한 후 출력해주는 코드이다.


2진수 10진수


2진수에서 10진수로 변환하려면 아래와 같이 코드를 작성할 수 있다.

n = input()
list_2 = []

for i in n:
    list_2.append(i)

num = 0
for i in list_2:
    i = int(i)
    num = num * 2 + i

print(num)

2진수 n을 입력받고 각 자리수를 하나씩 리스트로 만들어준뒤 자리수에 해당하는 값을 곱해준뒤 모두 합하여 출력한다.


 10진수  N진수


N, B = map(int, input().split())
result = []
while N > 0:
    digit = N % B
    N = N // B
    result.append(digit)

for i in range(len(result) - 1, -1, -1):
    print(result[i], end = "")

10진수 N과 바꿀 진수인 B를 입력받아서 진수를 변환하여 출력해주는 코드이다.


int() (N진수 10진수)


위와 같이 직접적으로 코드를 구현하여 진수를 변환할 수 있지만, 파이썬에서는 내장함수 int()를 지원한다.

int()는 형변환시 많이 사용하지만 진수변환도 가능하다.

int(string, base) : string 부분에 문자열 형식으로 숫자를 넘겨주고, base 부분에 현재 string의 진법을 넣어주면 된다.

print(int('1010',2))
print(int('101',3))
print(int('22',4))
print(int('20',5))
print(int('14',6))
print(int('AB10',16))

출력결과:

10
10
10
10
10
43792

입력된 string형식의 수를 base 진법에서 10진법으로 변경해준다. 주의할점은 string형식이여야 한다는 점이다.


 int() (10진수  N진수)


파이썬에서 2진수, 8진수, 16진수는 각각의 내장 함수(bin(), oct(), hex())를 지원한다.

print(bin(10))
print(oct(10))
print(hex(10))

출력결과:

0b1010
0o12
0xa

위와 같이 0b, 0o, 0x등 해당 진법을 알 수 있도록 명시하여 변환된다. 만약 위 부분을 제외하고 출력하고싶다면 

문자열 슬라이싱([2:])을 활용하면 된다.

print(bin(10)[2:])
print(oct(10)[2:])
print(hex(10)[2:])

출력결과:

1010
12
a

2진수 8진수 16진수를 제외한 나머지 N 진수들은 앞서말한 진수 변환 코드를 사용하여 변환해야한다.


 int() (N진수  N진수)


N진수에서 N진수 변환은 아래와 같이 작성할 수 있다.

a, b = input().split() # a 진수 -> b 진수
n = input() # a 진수 n

# a진수 n을 10진수로
list_a = []
for i in n: # n을 리스트로 한개씩 분리
    list_a.append(i)

a = int(a)
num = 0 # 10진수 저장할 변수

for i in list_a:
    i = int(i)
    num = num * a + i

# 10진수를 n을 b 진수로
result = []
b = int(b)
while num > 0:
    digit = num % b
    num = num // b
    result.append(digit)

for i in range(len(result) - 1, -1, -1):
    print(result[i], end = "")

먼저 a진수인 n을 10진수로 변환한 뒤 10진수에서 다시 b진수로 변환하는 코드이다.


 

'Python' 카테고리의 다른 글

파이썬 class 객체 정렬  (0) 2024.01.24
파이썬 람다(lambda) 함수  (0) 2024.01.24
파이썬 N까지의 소수 개수 구하기  (0) 2024.01.23
파이썬 두 수의 최소공배수  (0) 2024.01.23
Python 클래스와 객체  (0) 2024.01.20