| 연산자 | 이름 | 설명 | 연산 효과 |
|---|---|---|---|
<< |
좌측 쉬프트 | 비트를 왼쪽으로 이동. 빈자리는 0으로 채움 | $x \times 2^n$ |
>> |
우측 쉬프트 | 비트를 오른쪽으로 이동. 빈자리는 부호 비트로 채움 | $x / 2^n$ |
>>> |
논리 우측 쉬프트 | 비트를 오른쪽으로 이동. 빈자리는 무조건 0으로 채움 | (양수만 처리 시 유용) |
a << b)a의 비트를 b만큼 왼쪽으로 이동. 오른쪽 끝의 빈자리는 모두 0으로 채운다. 범위를 벗어나는 왼쪽 비트들은 버려진다.
3 << 2
3은 이진수로 0000...00110000...1100 (십진수 12)a >> b)a의 비트를 b만큼 오른쪽으로 이동. 왼쪽 빈자리를 부호 비트(MSB)와 동일한 값으로 채운다. (양수 0, 음수 1)
-8은 이진수로 1111...10001111...1110 (십진수 -2)a >>> b)>>와 비슷하지만, 부호 비트와 상관없이 무조건 빈자리를 0으로 채운다. 이 연산을 수행하면 결과는 항상 양수가 된다.
비트 쉬프트는 단순히 자리를 옮기는 것이라 곱셈, 나눗셈 연산이 압도적으로 빠르다.
대량의 연산이 필요한 그래픽 엔진이나 암호화 알고리즘에서 $2$의 배수를 곱하거나 나눌 때 사용한다.
int value = 100;
int result1 = value << 3; // 100 * 8 = 800
int result2 = value >> 2; // 100 / 4 = 25
2^n 계산이 명확한 곳에만 주석과 함께 사용하자.<<는 2를 곱하는 효과, >>는 2로 나누는 효과가 있다.>>는 부호를 유지하지만, >>>는 부호를 무시하고 0으로 채운다.