자바스크립트 비트 연산자 (Bitwise Operations)

2진수에 대한 지식이 없으면 아래 동영상을 보시기 바랍니다.

Operator Name Description
& AND 양쪽 비트가 1이면, 각 비트는 1로 설정합니다.
| OR 양쪽 비트 중 하나가 1이면, 각 비트는 1로 설정합니다.
^ XOR 양쪽 비트 중 하나 만이 1일 경우, 각 비트는 1로 설정합니다.
~ NOT 모든 비트를 반전(Inverts)시킵니다.
<< Zero fill left shift 오른쪽에 0을 밀어넣어 왼쪽으로 이동하고, 가장 왼쪽 비트가 떨어져 나갑니다.
>> Signed right shift 가장 왼쪽 비트의 복사본을 왼쪽에 밀어 오른쪽으로 이동하고, 맨 오른쪽 비트가 떨어져 나갑니다.
>>> Zero fill right shift 왼쪽에 0을 밀어넣어 오른쪽으로 이동하고, 맨 오른쪽 비트가 떨어져 나갑니다.

Examples

Operation Result Same as Result
5 & 1 1 0101 & 0001  0001
5 | 1 5 0101 | 0001  0101
~ 5 10  ~0101  1010
5 << 1 10 0101 << 1  1010
5 ^ 1 4 0101 ^ 0001  0100
5 >> 1 2 0101 >> 1  0010
5 >>> 1 2 0101 >>> 1  0010

자바스크립트는 32 비트 비트 피연산자(Bitwise Operands)를 사용합니다.

자바스크립트는 숫자를 64 비트 부동 소수점 수로 저장하지만 모든 비트 연산은 32 비트 2진수로 수행합니다.

비트 연산을 수행되기 전에 자바스크립트는 32 비트 부호있는 정수(signed integers)로 변환합니다.

비트 연산을 수행한 후 결과는 다시 64 비트 자바스크립트 숫자로 변환됩니다.


비트(Bitwise) AND

한 쌍의 비트에 대해 비트 AND가 수행되면, 양쪽 비트가 모두 1이면 1을 반환합니다:

1 비트(bit) 예제:

Operation Result
0 & 0 0
0 & 1 0
1 & 0 0
1 & 1 1
4 비트 예제:

Operation Result
1111 & 0000 0000
1111 & 0001 0001
1111 & 0010 0010
1111 & 0100 0100

비트(Bitwise) OR

한 쌍의 비트에 대해 비트 OR을 수행할 때, 양쪽 비트 중 하나가 1 인 경우 1을 반환합니다:

1 비트 예제:

Operation Result
0 | 0 0
0 | 1
1 | 0 1
1 | 1 1
4 비트 예제:

Operation Result
1111 | 0000 1111
1111 | 0001 1111
1111 | 0010 1111
1111 | 0100 1111

비트(Bitwise) XOR

한 쌍의 비트에 대해 비트 XOR을 수행하면, 비트가 다른 경우 1을 반환합니다:

1비트 예제:

Operation Result
0 ^ 0 0
0 ^ 1
1 ^ 0 1
1 ^ 1
4 비트 예제:

Operation Result
1111 ^ 0000 1111
1111 ^ 0001 1110
1111 ^ 0010 1101
1111 ^ 0100 1011

자바스크립트 비트(Bitwise) AND (&)

비트 AND는 두 비트가 모두 1 인 경우에만 1을 반환합니다:

Decimal Binary
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 & 1 00000000000000000000000000000001 (1)

Example

1


자바스크립트 비트(Bitwise) OR (|)

비트 중 하나가 1이면 1을 반환합니다:

Decimal Binary
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 | 1 00000000000000000000000000000101 (5)

Example

5


자바스크립트 비트(Bitwise) XOR (^)

비트 XOR은 비트가 다른 경우 1을 반환합니다:

Decimal Binary
5 00000000000000000000000000000101
1 00000000000000000000000000000001
5 ^ 1 00000000000000000000000000000100 (4)

Example

4


자바스크립트 비트(Bitwise) NOT (~)

Decimal Binary
5 00000000000000000000000000000101
~5 11111111111111111111111111111010 (-6)

Example

-6


자바스크립트 (Zero Fill) 비트 왼쪽 시프트 (Bitwise Left Shift) (<<)

이것은 왼쪽으로 이동합니다. 하나 이상의 제로 비트가 오른쪽에 채워지고 가장 왼쪽 비트가 누락됩니다(fall off):

Decimal Binary
5 00000000000000000000000000000101
5 << 1 00000000000000000000000000001010 (10)

Example

10


자바스크립트 (Sign Preserving) 비트 오른쪽 시프트 (Bitwise Right Shift) (>>)

이것은 부호를 유지하고 오른쪽으로 이동합니다. 맨 왼쪽 비트의 복사본을 왼쪽에 채우고 오른쪽 비트가 누락됩니다:

Decimal Binary
-5 11111111111111111111111111111011
-5 >> 1 11111111111111111111111111111101 (-3)

Example

-3


자바스크립트 (Zero Fill) 오른쪽 시프트 (Right Shift (>>>)

이것은 0을 채우고 오른쪽으로 이동합니다. 하나 이상의 제로 비트가 왼쪽에 채워지고 맨 오른쪽 비트가 누락됩니다:

Decimal Binary
5 00000000000000000000000000000101
5 >>> 1 00000000000000000000000000000010 (2)

Example

2


2진수 (Binary Numbers)

1 비트 만 설정하는 2진수는 이해하기 쉽습니다:

Binary Representation Decimal value
00000000000000000000000000000001 1
00000000000000000000000000000010 2
00000000000000000000000000000100 4
00000000000000000000000000001000 8
00000000000000000000000000010000 16
00000000000000000000000000100000 32
00000000000000000000000001000000 64

조금 더 비트를 설정하면 2진수의 패턴이 나타납니다:

Binary Representation Decimal value
00000000000000000000000000000101 5 (4 + 1)
00000000000000000000000000001101 13 (8 + 4 + 1)
00000000000000000000000000101101 45 (32 + 8 + 4 + 1)

자바 스크립트 이진수는 2의 보수 형식(two’s complement format)으로 저장됩니다.

즉, 음수는 숫자의 비트 NOT에 1을 더한 것을 의미합니다:

Binary Representation Decimal value
00000000000000000000000000000101 5
11111111111111111111111111111011 -5
00000000000000000000000000000110 6
11111111111111111111111111111010 -6
00000000000000000000000000101000 40
11111111111111111111111111011000 -40

2의 보수 형식(two’s complement format) 및 부동 소수점 등에 대해 더 알려면 아래 동영상의 뒷부분을 참조하세요.


10진수(Decimal)를 2진수(Binary)로 변환

Example

11111111111111111111111111111011


2진수(Binary)를 10진수(Decimal)로 변환

Example

5

출처: JavaScript Bitwise Operations

답글 남기기