JavaScript 비트 연산자
JavaScript 비트 연산자
연산자 | 이름 | 설명 |
---|---|---|
& | AND | 두 비트가 모두 1이면 각 비트를 1로 설정한다. |
| | OR | 두 비트 중 하나가 1이면 각 비트를 1로 설정한다. |
^ | XOR | 두 비트 중 하나만 1이면 각 비트를 1로 설정한다. |
~ | NOT | 모든 비트를 반전시킨다. |
<< | 0으로 가득 채운 왼쪽 이동 | 오른쪽에서 0을 밀어넣어 왼쪽으로 이동하고 가장 왼쪽의 비트가 떨어져 나간다. |
>> | 부호 있는 오른쪽 이동 | 왼쪽에서 가장 왼쪽의 복사본을 밀어넣어 오른쪽으로 이동하고 가장 오른쪽의 비트가 떨어져 나간다. |
>>> | 0으로 가득 채운 오른쪽 이동 | 왼쪽에서 0을 밀어넣어 오른쪽으로 이동하고 가장 오른쪽의 비트가 떨어져 나간다. |
예제
작업 | 결과 | 동일합니다 | 결과 |
---|---|---|---|
5 & 1 | 1 | 0101 & 0001 | 0001 |
5 | 1 | 5 | 0101 | 0001 | 0101 |
5 ^ 1 | 4 | 0101 ^ 0001 | 0100 |
~ 5 | 10 | ~0101 | 1010 |
5 << 1 | 10 | 0101 << 1 | 1010 |
5 >> 1 | 2 | 0101 >> 1 | 0010 |
5 >>> 1 | 2 | 0101 >>> 1 | 0010 |
JavaScript는 32비트 비트 연산 수를 사용합니다
JavaScript는 숫자를 64비트 부호 없는 정수로 저장하지만, 모든 비트 연산은 32비트 이진수로 수행됩니다。
비트 연산을 수행하기 전에, JavaScript는 숫자를 32비트 부호 있는 정수로 변환합니다。
비트 연산을 수행한 후, 결과는 64비트 JavaScript 수로 변환됩니다。
위의 예제는 4비트 무부호 이진수를 사용합니다. 따라서 ~5는 10을 반환합니다。
JavaScript는 32비트 부호 있는 정수를 사용하기 때문에, JavaScript는 -6을 반환합니다。
00000000000000000000000000000101 (5)
11111111111111111111111111111010 (~5 = -6)
부호 있는 정수는 가장 왼쪽 비트를 마이너스로 사용합니다。
비트 연산 AND
비트 연산 AND을 수행할 때, 위치가 모두 1이면 1을 반환합니다。
단위 예제:
연산 | 결과 |
---|---|
0 & 0 | 0 |
0 & 1 | 0 |
1 & 0 | 0 |
1 & 1 | 1 |
4비트 예제:
연산 | 결과 |
---|---|
1111 & 0000 | 0000 |
1111 & 0001 | 0001 |
1111 & 0010 | 0010 |
1111 & 0100 | 0100 |
비트 연산 OR
비트 연산 OR을 수행할 때, 그 중 하나가 1이면 1을 반환합니다:
단위 예제
연산 | 결과 |
---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
4비트 연산:
작업 | 결과 |
---|---|
1111 | 0000 | 1111 |
1111 | 0001 | 1111 |
1111 | 0010 | 1111 |
1111 | 0100 | 1111 |
비트 연산 XOR
비트 연산 XOR을 수행할 때, 수치의 위치가 다르면 1을 반환합니다:
단위 예제:
연산 | 결과 |
---|---|
0 ^ 0 | 0 |
0 ^ 1 | 1 |
1 ^ 0 | 1 |
1 ^ 1 | 0 |
4비트 예제:
연산 | 결과 |
---|---|
1111 ^ 0000 | 1111 |
1111 ^ 0001 | 1110 |
1111 ^ 0010 | 1101 |
1111 ^ 0100 | 1011 |
JavaScript 비트 연산 AND (&)
비트 위치가 모두 1이면, 비트 연산 AND가 1을 반환합니다:
십진수 | 이진수 |
---|---|
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 & 1 | 00000000000000000000000000000001 (1) |
예제
var x = 5 & 1;
JavaScript 비트 연산 OR (|)
수자 중 하나가 1이면 비트 연산 OR은 1을 반환합니다:
십진수 | 이진수 |
---|---|
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 | 1 | 00000000000000000000000000000101 (5) |
예제
var x = 5 | 1;
JavaScript 비트 연산 XOR (^)
수자가 다르다면 XOR은 1을 반환합니다:
십진수 | 이진수 |
---|---|
5 | 00000000000000000000000000000101 |
1 | 00000000000000000000000000000001 |
5 ^ 1 | 00000000000000000000000000000100 (4) |
예제
var x = 5 ^ 1;
JavaScript 비트 연산 NOT (~)
십진수 | 이진수 |
---|---|
5 | 00000000000000000000000000000101 |
~5 | 11111111111111111111111111111010 (-6) |
예제
var x = ~5;
JavaScript(0으로 채우기) 비트 연산 왼쪽 이동(<<)
이는 0으로 채워진 왼쪽 이동입니다. 오른쪽에서 0의 수자가 밀려들고, 가장 왼쪽의 수자가 제거된다:
십진수 | 이진수 |
---|---|
5 | 00000000000000000000000000000101 |
5 << 1 | 00000000000000000000000000001010 (10) |
예제
var x = 5 << 1;
JavaScript(기호 유지) 비트 연산 오른쪽 이동(>>)
이는 기호를 유지하는 오른쪽 이동입니다. 가장 왼쪽의 수자가 왼쪽에서 밀려들고, 가장 오른쪽의 수자가 밀려나간다:
십진수 | 이진수 |
---|---|
-5 | 11111111111111111111111111111011 |
-5 >> 1 | 11111111111111111111111111111101 (-3) |
예제
var x = -5 >> 1;
JavaScript(0으로 채우기) 오른쪽 이동(>>>)
이는 0으로 채워진 오른쪽 이동입니다. 왼쪽에서 0의 수자가 밀려들고, 가장 오른쪽의 수자가 밀려나간다:
십진수 | 이진수 |
---|---|
5 | 00000000000000000000000000000101 |
5 >>> 1 | 00000000000000000000000000000010 (2) |
예제
var x = 5 >>> 1;
32-bit signed 정수(이진수)
단 한 비트만 설정된 32비트 정수는 잘 이해됩니다:
이진수 표현 | 십진수 값 |
---|---|
00000000000000000000000000000001 | 1 |
00000000000000000000000000000010 | 2 |
00000000000000000000000000000100 | 4 |
00000000000000000000000000001000 | 8 |
00000000000000000000000000010000 | 16 |
00000000000000000000000000100000 | 32 |
00000000000000000000000001000000 | 64 |
또한 많은 자리수를 설정하여 이진수의 패턴을 밝혀냅니다:
이진수 표현 | 십진수 값 |
---|---|
00000000000000000000000000000101 | 5 (4 + 1) |
00000000000000000000000000101000 | 40 (32 + 8) |
00000000000000000000000000101101 | 45 (32 + 8 + 4 + 1) |
부정수는 정수의 이진 보정 코드에 1을 추가하여 계산됩니다:
이진수 표현 | 십진수 값 |
---|---|
00000000000000000000000000000101 | 5 |
11111111111111111111111111111011 | -5 |
00000000000000000000000000101000 | 40 |
11111111111111111111111111011000 | -40 |
11111111111111111111111111011001 | -41 |