Python's bit shift operator (<<, >>)

이진·2023년 4월 21일

파이썬 코드를 보다가 >> 연산자를 발견했다.
그래도 나름 파이썬 공부를 어느정도 했다고 생각했는데 잘 모르는 부분도 아니고 그냥 아예 난생 처음 보는 연산자가 등장해서 조금 놀랐다. 처음에는 비교연산자 중 하나인가? 싶었는데 찾아보니 전혀 아니었다.

먼저 간단하게 예제 코드를 실행해보았다.

n = int(input())
n = n >> 1
print(n)

n에 몇가지 값을 넣고 돌려보니 결과는 다음과 같았다.


noutput
105
168
178
8944

처음에는 2로 나눈 몫을 출력하는 건가? 싶었다.

이 외에도 n = n >> 2n = n << 1 로 코드를 수정하여 돌려보았는데
모두 2로 나눈 몫이나 곱한값으로 출력이 되었다.

대체 이게 뭐하는 연산이지? 싶어서 찾아보았더니 비트 쉬프트 연산이었던 것이다!

우선 우리가 integer 값을 컴퓨터에 넣어주면 당연하게도 컴퓨터는 이를 2진수로 변환해서 저장한다.
예를들어 n = 17 을 한다면 1710001로 저장이 될 것이다. 그렇담 이 10001을 오른쪽으로 한비트씩 밀어준다면? 맨 끝자리는 밀려서 사라지고 1000 즉 10진수로 8이 될 것이다.
반대로 왼쪽으로 한비트씩 밀어준다면? 맨 끝자리에 0이 추가되어 100010즉 10진수로 34가 되는 것이다.

이렇게 비트를 오른쪽(>> n) 또는 왼쪽(<< n)으로 n칸씩 밀어주는 연산자가 비트 연산자 이다.

사실 10진수 integer 에서 연산한 결과값은 multi 2^n (<< n) mod 2^n (>> n) 과 같기 때문에 이러한 비트 쉬프트 연산자가 어디에서 활용될 지는 더 알아봐야겠다. (아마 2진수나 16진수를 사용할 때 유용할 것 같은데 파이썬에서 2진수, 16진수를 사용하는 것도 같이 알아보면 좋을 것 같다!)

0개의 댓글