Javascript/이론

[JS] 비트 연산자 - "&", "|", "^", "~", "<<", ">>", ">>>"

OnnJE 2022. 12. 14. 13:35
반응형

 

1. a & b (AND)

  2진법 표기에서 a, b 각 자리에서 모두 1일 경우 해당 자리수에 1 반환

 

const a = 5;        // 00000000000000000000000000000101
const b = 3;        // 00000000000000000000000000000011

console.log(a & b); // 00000000000000000000000000000001

 

 

2. a | b (OR)

  2진법 표기에서 각 피연산자에서의 비트 자리에 1이 존재하는 경우 해당 자리에 1 반환

 

const a = 5;        // 00000000000000000000000000000101
const b = 3;        // 00000000000000000000000000000011

console.log(a | b); // 00000000000000000000000000000111

 

 

3. a ^ b (XOR)

  2진법 표기에서 각 피연산자의 자리수의 값이 동일한 경우 0을, 그 외의 경우 1을 반환

 

const a = 5;        // 00000000000000000000000000000101
const b = 3;        // 00000000000000000000000000000011

console.log(a ^ b); // 00000000000000000000000000000110

 

 

4. ~ (NOT)

  2진법 표기에서 피연산자의 각 자리에 NOT연산을 적용한다.

 

const a = 5;     // 00000000000000000000000000000101
const b = -3;    // 11111111111111111111111111111101

console.log(~a); // 11111111111111111111111111111010
console.log(~b); // 00000000000000000000000000000010

 

 

5. a << b (LEFT SHIFT)

  2진법 표기에서 a 를 b 비트 만큼 왼쪽으로 이동. 범위를 초과한 비트를 삭제되며 오른쪽에서 0이 채워진다.

 

const a = 5;         // 00000000000000000000000000000101
const b = 2;         // 00000000000000000000000000000010

console.log(a << b); // 00000000000000000000000000010100

 

 

6. >> (RIGHT SHIFT)

  2진법 표기에서 a 를 b 비트만큼 오른쪽으로 이동. 우측으로 범위를 초과한 비트는 삭제되며, 좌측에서는 맨 왼쪽 비트의 복사본이 채워진다.

 

const a = 5;          //  00000000000000000000000000000101
const b = 2;          //  00000000000000000000000000000010
const c = -5;         //  11111111111111111111111111111011

console.log(a >> b);  //  00000000000000000000000000000001
console.log(c >> b);  //  11111111111111111111111111111110

 

 

7. >>> (ZERO-FILL RIGHT SHFT)

  2진법 표기에서 a 를 b 비트만큼 오른쪽으로 이동. 우측으로 범위를 초과한 비트는 삭제되며, 좌측에서는 0이 채워진다.

 

const a = 5;          //  00000000000000000000000000000101
const b = 2;          //  00000000000000000000000000000010
const c = -5;         //  11111111111111111111111111111011

console.log(a >>> b); //  00000000000000000000000000000001
console.log(c >>> b); //  00111111111111111111111111111110
반응형