본문 바로가기
→ 블로그 운영자의 CS 무료 강의 보러가기
프로그래밍 언어 학습/파이썬

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

by 꼼꼼한 지식공유자 이용준 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

 

 

말이 트이는 CS 기술면접

CS 기술면접에서 계속 막히는 분들께 도움이 될 수 있는 강의입니다. 무료 강의도 있으니 부담없이 방문해보세요.

👉 강의 보러 가기

📘 비전공자 개발자 취업 성공기 시리즈

개발자가 되고 싶었던 한 비전공자의 1년 4개월 이야기
막막했던 시작부터 좌절, 그리고 합격까지의 여정을 기록했습니다

댓글