코딩테스트/Python 개념

[Python] 2진수 / 8진수 / 16진수 / n진수 변환

박소민 2022. 3. 8. 15:05
2진수 / 8진수 / 16진수 표현
  • 앞에 접두어를 붙여 구분한다
    • 2진수 : 0b
    • 8진수 : 0o
    • 16진수 : 0x
print(42==0b101010)
#결과
True

 

숫자 10진수 → 2진수 / 8진수 / 16진수 변환
  • 파이썬 내장함수 사용
  • 접두어가 붙은 문자열로 변환됨 
    • 2진수: bin()
    • 8진수: oct()
    • 16진수: hex()
print(bin(42))
print(oct(42))
print(hex(42))
#결과
'0b101010'
'0o52'
'0x2a'

 

 

format() 함수 사용:  2진수/ 8진수/ 16진수 변환
  • 접두어를 제외한 값 변환
  • 접두어 표시하려면 # 붙여주면 됨
  • 문자열 길이를 고정하고 싶을 때는 앞에 길이 써주면 됨
    • 2진수 : format(숫자, 'b')
    • 8진수 : format(숫자, 'o')
    • 16진수 : format(숫자, 'x')
print(format(42,'b'))
print(format(42,'o'))
print(format(42,'x'))
print(format(42,'X'))
print(format(42,'d'))
#접두사 붙여서 출력
print(format(42,'#x'))
#길이 지정 출력
print(format(42,'8b'))
#결과
101010
52
2a
2A
42
0x2a
  101010
print("int: {0:d}, bin: {0:b}, oct: {0:o}, hex: {0:x}".format(42))
#결과
int: 42, bin: 101010, oct: 52, hex: 2a

 

 

N진수 → 10진수 변환
  • int('문자열' , N)
  • 기존에 사용하던 int() 에는 n=10이 생략되어 있던 것(10진수) 
print(int('0b101010',2))
print(int('0o52',8))
print(int('0x2a',16))
#결과
42
42
42
참고링크: https://ko.wikihow.com/%EC%9D%B4%EC%A7%84%EC%88%98%EB%A5%BC-%EC%8B%AD%EC%A7%84%EC%88%98%EB%A1%9C-%EB%B3%80%ED%99%98%ED%95%98%EB%8A%94-%EB%B2%95

 

 

 

10진수 → N진수 변환
  • int 같은 함수가 없기 때문에 코드작성이 필요하다
  • divod( a, b ) : 정수를 나눈 나머지를 동시에 구할 때 사용하는 함수
def solution(n, q):
    rev_base = ''

    while n > 0:
        n, mod = divmod(n, q)
        rev_base += str(mod) #나머지들을 더함

    return rev_base[::-1] 
    # 역순인 진수를 뒤집어 줘야 원래 변환 하고자하는 base가 출력
    
print(solution(45, 3))
#결과
1200
  • 위의 코드는 10진수 이하만 가능
    • 10~15를 A~F로 나타내도록 하는 전체진수 가능한 코드
#N진수 변환 함수
#10~15를 A~F로 나타낸다
def jinsu(n, base):
    arr = "0123456789ABCDEF"
    q, r = divmod(n, base)
    if q == 0:
        return arr[r]
    else:
        return jinsu(q, base) + arr[r] #맨뒤 나머지부터 출력됨

 

 

 

N진수 → N진수
  • 위의 함수 작성 후
  • N진수 → 10진수 → N진수로 변경
print(solution(int('c',16),4)) # 16진수인 C를 4진수로 바꾸는것
print(solution(int('4',6),3))  # 6진수인 4를 3진수로 바꾸는것
print(solution(int('21',3),7)) # 3진수인 21을 7진수로 바꾸는것
print(solution(int('15',9),5)) # 9진수인 15를 5진수로 바꾸는것

 

 

참고: daleSeo블로그

 

[파이썬] 2진수, 8진수, 16진수 다루기

Engineering Blog by Dale Seo

www.daleseo.com