● 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진수로 변환하는 코드이다.