본문 바로가기
Programming Language/Python

[ 파이썬 python ] 비트 연산을 위해 알아야 할 것들

by ggyongi 2021. 7. 22.
반응형

1. 입력 문자열을 숫자로 바꾸기

 

"34" 같은 문자열은 쉽게 숫자로 바꿀 수 있다. int로 감싸주기만 하면 된다.

num = "34"
int(num)

그런데 문자열이 "10111001"와 같이 0과 1만으로 이루어져있는 경우가 있다. 특히 비트 연산을 이용하여 

풀어야 하는 문제의 경우 입력을 이와 같이 받게 되는 경우가 종종 생기는데,

그럼 이 문자열을 숫자로 고쳐줘야 한다.

 

이때 그냥 int로 감싸주면 정수 10111001(1천만 11만 1천 1)로 변환될 것이다. 

이렇게 큰 수를 의도한게 아니므로 int로 변환시 이 문자열을 이진수로 인식하라는 명령을 내려줘야 하는데

파이썬에서는 다음과 같이 사용할 수 있다.

int 메소드의 두번째 인자로 진법 수를 넘겨주면 된다.

a = "10111001"
print(int(a, 2))

b = "0b10111001"        ## 문자열 앞에 0b가 포함되어 있어도 가능하다.
print(int(b, 2))

>> 185
>> 185

그럼 이 변환된 수를 다시 받아 비트 연산에 사용하면 된다.

 

2. 비트 연산 할때 주의할 점

내가 자주 착각하는 것이 비트 연산을 하기 위해 두 수를 모두 2진수 형태로 바꿔줘야겠다고 생각하는데

비트 연산은 2진수 형태로 바꿔줄 필요가 없다.

print(2^6)
print(0b10^0b110)
print(2^0b110)

>> 4
>> 4
>> 4

 

3. 0 또는 1의 개수 세는법

count 메소드로 세는 것이 가능하다. 그런데 count 메소드는 숫자가 아닌 문자열 자료형에만 적용할 수 있다. 

따라서 숫자를 문자열 형태로 변환해주는 과정이 필요하다.

방법은 숫자를 bin으로 감싸주면 된다. 이때 숫자가 꼭 2진수 형태일 필요가 없다.

기억해야 될 것은 bin으로 감싸주면 자료형이 숫자가 아닌 문자열 형식이 된다. (str)

num = 13
print(bin(num))
print(bin(num)[2:].count('0'))
print(bin(num)[2:].count('1'))

>> '0b1101'
>> 1
>> 3
num = 0b1101
print(bin(num))
print(bin(num)[2:].count('0'))
print(bin(num)[2:].count('1'))

>> '0b1101'
>> 1
>> 3

 

 

 

비전공자 네카라 신입 취업 노하우

시행착오 끝에 얻어낸 취업 노하우가 모두 담긴 전자책!

kmong.com

댓글