num = 205
binary_num = bin(num)
print("10진수 -> 2진수: ",binary_num) #0b11001101
num = 205
print("10진수 -> 8진수: ",oct(num)) #0o315
binary_num = "0b11001101"
print("2진수 -> 10진수: ",int(binary_num,2)) #205
print("2진수 -> 8진수: ",oct(0b11001101)) #0o315
print("2진수 -> 16진수: ",hex(0b11001101)) #0xcd
print("8진수 -> 10진수: ",int("0o315",8)) #205
def make_binary(num):
binary = []
while num:
binary.append(str(num%2))
num = num // 2
binary.reverse()
return ''.join(binary)
def make_hex(num):
match = {10:"a",11:"b",12:"c",13:"d",14:"e",15:"f"}
hex = []
while num:
value = num % 16
if value >= 10:
hex.append(match[value])
else:
hex.append(str(value))
num = num // 16
hex.reverse()
return "".join(hex)
def make_decimal(binary_num):
binary_num = binary_num[::-1] # 문자열 역전시킴 ex 1101 -> 1011
digit = 1
decimal = 0
for i in range(len(binary_num)):
decimal += digit * int(binary_num[i])
digit *= 2
return decimal
- 2진수를 8진수로 변환 (뒤에서 부터 3개씩 잘라서 더한 값을 각 자리에 더해주기)
def make_octal(binary_num):
binary_num = list(binary_num)
oct = []
count = 0 # 3개씩 더하기 위해 사용
sum = 0 # 3개의 합을 저장하기 위해 사용
digit = 1 # 2진수 형태로 더해주기 때문에 첫 digit 값 1이고, 추후 세 개가 더해지면 다시 digit 1로 초기화 진행
for i in range(len(binary_num)-1,-1,-1):
count += 1
sum += digit * int(binary_num[i])
if count == 3: # 세 개를 더했으면 이를 8진수 값 배열에 더해주고, 나머지 변수 초기화 진행.
oct.append(str(sum))
sum = 0
count = 0
digit = 1
continue
digit *= 2 # 세 개를 더하지 않았으면 계속 2진수 덧셈 진행
oct.append(str(sum))
oct.reverse()
return "".join(oct)
- 2진수를 16 진수로 변환 (네자리씩 더해주기)
def make_hex_by_binary(binary_num):
match = {10:"a",11:"b",12:"c",13:"d",14:"e",15:"f"}
hex = []
binary_num = binary_num[::-1]
digit = 1
sum = 0 # 네 개마다 더한 값을 저장할 변수
for i in range(len(binary_num)):
sum += digit * int(binary_num[i])
if (i+1) % 4 == 0: # 0부터 시작해서 4개씩 자를 것이므로 나누기 연산을 통해 확인
if sum >= 10:
hex.append(match[sum])
else:
hex.append(str(sum))
sum = 0
digit = 1
continue
digit *= 2
hex.reverse()
return "".join(hex)
num = 205
binary_num = make_binary(num)
print(f'10진수인 {num} -> 2진수 변환: {binary_num}')
print(f'2진수 -> 8진수 변환: {make_octal(binary_num)}')
print(f'2진수 -> 10진수 변환: {make_decimal(binary_num)}')
print(f'2진수 -> 16진수 변환: {make_hex_by_binary(binary_num)}')
print(f'10진수인 {num} -> 16진수 변환: {make_hex(num)}')
"""
실행 결과 :
10진수인 205 -> 2진수 변환: 11001101
2진수 -> 8진수 변환: 315
2진수 -> 10진수 변환: 205
2진수 -> 16진수 변환: cd
10진인 205 -> 16진수 변환: cd
"""