[Python] n진법 변환

2022. 11. 24. 20:05Programming/Python

 

[Python] n진법 변환

 

알고리즘 문제풀이를 하다가 3진법 변환의 문제를 만났다. 해당 경우 기존 진법의 정의를 사용하여 변환하였으나 파이썬에는 유용한 진수 변환 메서드들이 존재하기에 이를 정리하기 위해 글을 작성하게 되었다.

 

기수법 - 위키백과, 우리 모두의 백과사전 (wikipedia.org)

 

기수법 - 위키백과, 우리 모두의 백과사전

위키백과, 우리 모두의 백과사전. 진법은 여기로 연결됩니다. 군사 용어에 대해서는 진법 (군사) 문서를 참고하십시오. 기수법(記數法, numeral system)은 수를 시각적으로 나타내는 방법으로, 기수

ko.wikipedia.org

 

10진수 → n진법

 

10진법의 수를 x진법으로 변환할 때 쓰는 방법이다. 첫번째는 while문을 돌려 주어진 n이 0이 될 때까지 돌리는 방법이다.

이 방법으로는 구하고자 하는 수에 맞춰서 본인이 원하는 진법으로 변환이 가능하다

# 변환하고자 하는 숫자 : x
    while n>0:
        num=n%x
        answer+=str(num)
        n//=x
  # 글자가 뒤에서부터 들어오기때문에 reversed로 한번 뒤집어줘야한다
    answer="".join(reversed(answer))

 

또 다른 방법으로는 파이썬에서 제공하는 bin() / oct() / hex() 메서드를 통해 각각 2, 8, 16 진수로 변경이 가능하다

b = bin(213) 	# 2진수
o = oct(213)	# 8진수
h = hex(213)	# 16진수

print(b, o, h) # 각 수들을 출력

해당 메서드들의 주석 및 예시이다.

bin()
Return the binary representation of an integer.
 >>> bin(2796202)
     	  	'0b1010101010101010101010'

oct()
Return the octal representation of an integer.
 >>> oct(342391)
       		'0o1234567'	

hex()
Return the hexadecimal representation of an integer.
 >>> hex(12648430)
       		'0xc0ffee'

2 / 8 / 16 진수

이때 문자의 앞에오는 0과 알파벳은 각각의 진법을 의미한다.

  • 0b → 2진수
  • 0o  8진수
  • 0x   16진수

만약 해당 문자들을 보기 싫다면 문자열의 slice기능을 사용하여 뒤에 숫자 부분들만 가져오면 된다.

b =  bin(213)[2:]

출력 값

 

n진법 → 10진법

 

그럼 이러한 n진법으로 변하거나 주어진 숫자를 10진법으로 바꿔보자. 파이썬에서 내장되어 있는 메서드에 int()라는 메서드가 존재한다. 해당 메서드는 주어진 데이터(String으로 취급되는 숫자 같은 것을 숫자로 바꿔주는 기능이 존재한다. 

 

int(string, base)

 

이때 string은 말을 한 것과 같이 숫자로 이루어진 string 타입의 데이터가 들어오고, base의 경우에는 해당 string은 n진법을 통해 이루어진 것이라는 의미의 base다.

i = int('111',2)

즉 위의 경우는 111로 이루어진 string 타입 데이터는 2진법으로 만들어진것이고, 이를 i에 담아 해당 값을 출력하면

결과값

위와 같이 출력이 된다.

 

'Programming > Python' 카테고리의 다른 글

[Python] sort & sorted  (0) 2022.11.16
[Python] 문자열 인덱싱 / 슬라이싱  (0) 2022.11.15
[Python] 파이썬 with이란?  (0) 2022.09.12
[Python] 알고리즘 - 파이썬  (0) 2022.07.02
[Python] sys.stdin.readline() vs input()  (0) 2022.03.23