파이썬에서 <<와 >> 기호는 각각 왼쪽 시프트(left shift)와 오른쪽 시프트(right shift) 연산자로 정의됩니다. 이들은 비트(bitwise) 연산자에 속하며, 숫자 객체를 이진수 비트 형태로 표현한 뒤, 두 번째 피연산자에 지정한 자릿수만큼 비트 패턴을 왼쪽 또는 오른쪽으로 이동시키는 역할을 합니다.
왼쪽 시프트 연산자(<<)
<< 연산자는 비트 패턴을 왼쪽으로 이동시킵니다. 오른쪽 끝의 최하위 비트(least significant bits)에는 빈자리가 생기며, 그 자리에는 0이 채워집니다.
>>> a = 60 >>> bin(a) '0b111100' >>> b = a << 2 >>> b 240 >>> bin(b) '0b11110000'
위 예제를 보면 숫자 60의 이진수 표현은 111100입니다. 여기에 2비트만큼 왼쪽으로 시프트하면 11110000, 즉 십진수 240이 됩니다. 오른쪽 두 자리가 0으로 채워진 것을 확인할 수 있습니다.
참고로 왼쪽 시프트는 값에 2의 거듭제곱을 곱하는 것과 같은 효과를 냅니다. 즉, a << n은 a × 2ⁿ과 동일한 결과를 가집니다.
오른쪽 시프트 연산자(>>)
반대로 >> 연산자는 비트 패턴을 오른쪽으로 이동시킵니다. 왼쪽 끝의 최상위 비트(most significant bits)에는 0이 채워지고, 오른쪽 끝에서 밀려난 비트는 사라집니다.
>>> a = 60 >>> bin(a) '0b111100' >>> b = a >> 2 >>> b 15 >>> bin(b) '0b1111'
숫자 60(111100)을 2비트 오른쪽으로 시프트하면 1111, 즉 십진수 15가 됩니다. 마찬가지로 오른쪽 시프트는 값을 2의 거듭제곱으로 나누는 것과 같으므로, a >> n은 a ÷ 2ⁿ(정수 나눗셈)와 동일한 결과를 냅니다.
정리
<<: 비트를 왼쪽으로 n칸 이동 → 값이 2ⁿ배 커짐>>: 비트를 오른쪽으로 n칸 이동 → 값이 2ⁿ분의 1로 작아짐- 두 연산자 모두 내부적으로 이진수 비트 단위로 동작하는 비트 연산자임