본문 바로가기
Tips

Python식 진수 변환과 간단한 Tip!

by Think_why 2019. 10. 14.

10진수(Decimal)에서 2진수(Binary)로 바꾸는 방법

 

기본적으로 정수 숫자를 선언하면, 10진수의 정수 형태를 띄게 됩니다.

정의적인 진수 변환 후에 Python식의 진수 변환을 보겠습니다.

(구하고 싶은 진수의 값만 바꾸면 다른 진수들도 동작할 것입니다.)

 

 

 

10진수를 2진수로 바꾸는 방법은, 

1)  10진수를 2로 계속 나누어가며 

2)  몫이 0이 될 때까지 나머지를 구하고

3)  구한 나머지들을 아래에서부터 취하는 방법입니다.

이 방법을 사용해서 구현해보겠습니다.

 

 

10진수의 정수 10이 2진수의 문자열 '1010'으로 바뀌었습니다.

조금 더 Python스럽게 코드를 바꿔보겠습니다.

 

 

Python 내장함수 중에 divmod() 함수가 있습니다. 이 함수는 몫과 나머지를 함께 반환해줍니다.

조금 더 간단해진 코드를 확인하실 수 있습니다.

이것보다도 더 간단한 Python의 방식이 있습니다!

 

 

바로 bin() 함수를 쓰는 것입니다. (8진수로는 oct(), 16진수로는 hex() 함수를 사용합니다.)

주의할 점은 이 함수들이 문자열을 반환한다는 것입니다.

2진수 정수 값만 떼서 쓰고 싶다면 int(bin(x)[2:]) 정도가 필요할 것 같습니다.

 

문자열이 아닌 정수 값으로 쓴다면, Python에서는 알아서 10진수로 인식합니다.

어떤 의미인지는 아래 코드를 보시면 이해가 될 것 같습니다.

 

 

x에 문자열이 아닌, 0b1010 이라 입력하고 print() 했더니, 10진수 정수 값이 출력됩니다.

이러한 점 때문에 bin() 함수의 반환 값이 문자열이라는 것을 주의하라고 언급했습니다.

 

또 다른 방식으로는, format() 함수를 이용하여 바꾸는 방법입니다.

여기서 'b'는 binary(2진수), 'o'는 octal(8진수), 'x'는 hex(16진수)로 변환할 수 있습니다.

 

 

bin() 함수와는 조금 다르게, format() 에서는 문자열을 반환하지만 값만을 반환합니다.

 

 

2진수를 10진수로 바꾸는 방법

 

앞선 방법과 반대로 구현하면 됩니다.

1)  2진수의 순서를 반대로 만든다.

2)  2의 제곱 차수를 늘려가면서 값을 곱해준다.

3)  누적한다.

구현한 코드는 다음과 같습니다.

 

 

이번엔 While문을 쓰지 않아도 for문으로 구현할 수 있습니다.

1)  2진수의 순서를 반대로 만든다. (x[::-1])

2)  2의 제곱 차수를 늘려가면서 (2**idx) 값을 곱해준다.

3)  누적한다. (for문, decimal += )

 

여기서 enumerate()는 index와 value 값을 함께 반환해줍니다.

이를 이용하여 2진수의 10진수 변환을 간단하게 구현할 수 있습니다.

더 간단한 Python의 방식이 있습니다!

 

 

바로 int() 함수를 활용하는 것입니다!

바꾸고 싶은 문자열과 문자열의 진수를 입력하면, 간단히 10진수로 변환해줍니다.

( '0b1111'과 '1111' 모두 같은 15의 값으로 나옵니다. )

 

사실, int() 함수는 기본값으로 int(x, base=10) 이 되어있습니다.

그래서 일반적으로 10진수의 정수 값을 반환해주는 것입니다.

https://docs.python.org/ko/3/library/functions.html#int

728x90

댓글