자바스크립트 기본 문법 – 연산자 – 3 – 비트 연산자
비트 연산자란 무엇인가요?
비트 연산자는 자바스크립트에서 비트 수준(bit-level)에서 값을 조작하기 위해 사용되는 연산자입니다. 이 연산자들은 피연산자의 각 비트를 다루며, 정수형 숫자에 대해 사용됩니다. 자바스크립트에서는 다음과 같은 비트 연산자들을 제공합니다: AND(&), OR(|), XOR(^), NOT(~), 왼쪽 시프트(<<), 부호 있는 오른쪽 시프트(>>), 부호 없는 오른쪽 시프트(>>>).
AND 연산자(&)
AND 연산자(&)는 비트 단위로 두 피연산자의 값이 모두 1일 때 결과가 1이 되는 연산을 수행합니다. 예를 들어, 10진수로 표현한 값 5와 3의 비트 AND 연산을 해보겠습니다.
const a = 5 & 3;
console.log(a); // 출력: 1
위의 예시에서, 5는 2진수로 101
이고, 3은 2진수로 011
입니다. 각 비트에 대해 AND 연산을 수행하면 001
이 되며, 이는 10진수로 1을 나타냅니다. 따라서 결과는 1이 됩니다.
OR 연산자(|)
OR 연산자(|)는 비트 단위로 두 피연산자의 값 중 하나 이상이 1일 때 결과가 1이 되는 연산을 수행합니다. 예를 들어, 10진수로 표현한 값 5와 3의 비트 OR 연산을 해보겠습니다.
const a = 5 | 3;
console.log(a); // 출력: 7
위의 예시에서, 5는 2진수로 101
이고, 3은 2진수로 011
입니다. 각 비트에 대해 OR 연산을 수행하면 111
이 되며, 이는 10진수로 7을 나타냅니다. 따라서 결과는 7이 됩니다.
XOR 연산자(^)
XOR 연산자(^)는 비트 단위로 두 피연산자의 값이 서로 다를 때 결과가 1이 되는 연산을 수행합니다. 예를 들어, 10진수로 표현한 값 5와 3의 비트 XOR 연산을 해보겠습니다.
const a = 5 ^ 3;
console.log(a); // 출력: 6
위의 예시에서, 5는 2진수로 101
이고, 3은 2진수로 011
입니다. 각 비트에 대해 XOR 연산을 수행하면 110
이 되며, 이는 10진수로 6을 나타냅니다. 따라서 결과는 6이 됩니다.
NOT 연산자(~)
NOT 연산자(~)는 비트 단위로 피연산자의 값을 반전시키는 연산을 수행합니다. 예를 들어, 10진수로 표현한 값 5의 비트 NOT 연산을 해보겠습니다.
const a = ~5;
console.log(a); // 출력: -6
위의 예시에서, 5는 2진수로 101
입니다. NOT 연산을 수행하면 각 비트를 반전시키고, 부호 비트도 반전시킵니다. 따라서 결과는 10진수로 -6이 됩니다.
왼쪽 시프트(<<) 연산자
왼쪽 시프트(<<) 연산자는 피연산자의 비트를 왼쪽으로 지정한 수만큼 이동시킵니다. 이동된 비트는 0으로 채워집니다. 예를 들어, 10진수로 표현한 값 5를 왼쪽으로 2번 시프트 연산해보겠습니다.
const a = 5 << 2;
console.log(a); // 출력: 20
위의 예시에서, 5는 2진수로 101
입니다. 왼쪽으로 2번 시프트하면 비트는 10100
이 되며, 이는 10진수로 20을 나타냅니다. 따라서 결과는 20이 됩니다.
부호 있는 오른쪽 시프트(>>) 연산자
부호 있는 오른쪽 시프트(>>) 연산자는 피연산자의 비트를 오른쪽으로 지정한 수만큼 이동시킵니다. 이동된 비트는 부호 비트와 같은 값으로 채워집니다. 예를 들어, 10진수로 표현한 값 -10을 오른쪽으로 2번 시프트 연산해보겠습니다.
const a = -10 >> 2;
console.log(a); // 출력: -3
위의 예시에서, -10은 2진수로 -1010
입니다. 부호 있는 오른쪽 시프트 연산을 수행하면 비트는 -11
이 되며, 이는 10진수로 -3을 나타냅니다. 따라서 결과는 -3이 됩니다.
부호 없는 오른쪽 시프트(>>>) 연산자
부호 없는 오른쪽 시프트(>>>) 연산자는 피연산자의 비트를 오른쪽으로 지정한 수만큼 이동시킵니다. 이동된 비트는 항상 0으로 채워집니다. 예를 들어, 10진수로 표현한 값 -10을 부호 없는 오른쪽으로 2번 시프트 연산해보겠습니다.
const a = -10 >>> 2;
console.log(a); // 출력: 1073741821
위의 예시에서, -10은 2진수로 -1010
입니다. 부호 없는 오른쪽 시프트 연산을 수행하면 비트는 11111111111111111111111111111101
이 되며, 이는 10진수로 1073741821을 나타냅니다. 따라서 결과는 1073741821이 됩니다.
주의해야 할 점
- 비트 연산자는 일반적으로 정수형 숫자에 대해서만 동작합니다. 실수형 숫자는 내부적으로 정수로 변환되어 연산이 수행되므로 주의해야 합니다.
- 비트 연산자는 일반적인 프로그래밍에서는 잘 사용되지 않습니다. 주로 비트 조작이 필요한 특수한 상황에서 사용될 수 있습니다. 따라서, 자바스크립트 개발자로서 비트 연산자를 자주 사용할 필요는 없을 것입니다.
- 비트 연산자는 숫자의 비트 단위 조작을 위해 사용되므로, 일반적인 코딩 시나리오에서는 논리 연산자나 산술 연산자를 사용하는 것이 더 적합합니다.
이상으로 비트 연산자에 대한 설명을 마치도록 하겠습니다. 자바스크립트에서 비트 연산자를 사용하여 숫자의 비트를 조작할 수 있습니다. 하지만, 비트 연산자는 일반적인 상황에서는 잘 사용되지 않으며, 대부분의 경우 논리 연산자나 산술 연산자를 활용하는 것이 더 바람직합니다. 따라서, 비트 연산자를 사용할 때에는 신중하게 사용해야 하며, 주의해야 할 점을 명확히 이해하고 활용하는 것이 중요합니다.