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

십진수를 이진수로 변환합니다

예제

function dec2bin(dec){
    return (dec >>> 0).toString(2);
}

직접 시도해보세요

이진수를 십진수로 변환합니다

예제

function bin2dec(bin){
    return parseInt(bin, 2).toString(10);
}

직접 시도해보세요