JavaScript 입문 | 연산자 (operator) | 비트 연산자(bitwise operator)
비트 연산자(bitwise operator)
비트 연산자는 논리 연산자와 비슷하지만, 비트(bit) 단위로 논리 연산을 수행한다.
또한, 비트 단위로 전체 비트를 왼쪽이나 오른쪽으로 이동시킬 때도 사용한다.
| 비트 연산자 | 설명 |
|---|---|
| & | 대응되는 비트가 모두 1이면 1을 반환함. (비트 AND 연산) |
| | | 대응되는 비트 중에서 하나라도 1이면 1을 반환함. (비트 OR 연산) |
| ^ | 대응되는 비트가 서로 다르면 1을 반환함. (비트 XOR 연산) |
| ~ | 비트를 1이면 0으로, 0이면 1로 반전시킴. (비트 NOT 연산) |
| « | 지정한 수만큼 비트를 전부 왼쪽으로 이동시킴. (left shift 연산) |
| » | 부호를 유지하면서 지정한 수만큼 비트를 전부 오른쪽으로 이동시킴. (right shift 연산) |
| »> | 지정한 수만큼 비트를 전부 오른쪽으로 이동시키며, 새로운 비트는 전부 0이 됨. |
비트 AND 연산자(&)
비트 AND 연산자(&)는 대응되는 두 비트가 모두 1일 때만 1을 반환하며, 다른 경우는 모두 0을 반환한다.
1 비트 예제
| AND 연산자 | 결과 |
|---|---|
| 0 & 0 | 0 |
| 0 & 1 | 0 |
| 1 & 0 | 0 |
| 1 & 1 | 1 |
4 비트 예제
| AND 연산자 | 결과 |
|---|---|
| 1111 & 0000 | 0000 |
| 1111 & 0001 | 0001 |
| 1111 & 0010 | 0010 |
| 1111 & 0100 | 0100 |
비트 OR 연산(|)
비트 OR 연산자(|)는 대응되는 두 비트 중 하나라도 1이면 1을 반환하며, 두 비트가 모두 0일 때만 0을 반환한다.
1 비트 예제
| OR 연산자 | 결과 |
|---|---|
| 0 | 0 | 0 |
| 0| 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
4 비트 예제
| OR 연산자 | 결과 |
|---|---|
| 1111 | 0000 | 1111 |
| 1111 | 0001 | 1111 |
| 1111 | 0010 | 1111 |
| 1111 | 0100 | 1111 |
비트 XOR 연산자(^)
비트 XOR 연산자(^)는 대응되는 두 비트가 서로 다르면 1을 반환하고, 서로 같으면 0을 반환한다.
1 비트 예제
| OR 연산자 | 결과 |
|---|---|
| 0 ^ 0 | 0 |
| 0 ^ 1 | 1 |
| 1 ^ 0 | 1 |
| 1 ^ 1 | 0 |
4 비트 예제
| OR 연산자 | 결과 |
|---|---|
| 1111 ^ 0000 | 1111 |
| 1111 ^ 0001 | 1110 |
| 1111 ^ 0010 | 1101 |
| 1111 ^ 0100 | 1011 |
비트 NOT 연산자(~)
비트 NOT 연산자(~)는 해당 비트가 1이면 0을 반환하고, 0이면 1을 반환한다.
1 비트 예제
| OR 연산자 | 결과 |
|---|---|
| ~ 0 | 1 |
| ~ 1 | 0 |
4 비트 예제
| OR 연산자 | 결과 |
|---|---|
| ~ 0000 | 1111 |
| ~ 0001 | 1110 |
| ~ 0010 | 1101 |
| ~ 0100 | 1011 |
비트 시프트 연산자(«, »)
다음 예제는 시프트 연산자(«, »)와 비트 NOT 연산자(~)의 예제이다.
var x = 15, y = 8, z = 15;
document.write((x << 1) + "<br>"); // 곱하기 2와 같으므로 15 * 2 = 30
document.write((y >> 1) + "<br>"); // 나누기 2와 같으므로 8 / 2 = 4
document.write(~z); // 1의 보수와 같으므로 -(15+1) = -16
위의 예제에서 첫 번째 연산은 비트를 전부 왼쪽으로 1비트씩 이동시키는 연산이다.
따라서 그 결과 값은 처음 값에 2를 곱한 것과 같게 된다.
반대로 두 번째 연산은 비트를 전부 오른쪽으로 1비트씩 이동시키는 연산이다.
따라서 그 결과 값은 처음 값에 2를 나눈 것과 같게 된다.