JavaScript - 비트 연산자

안녕하세요, 미래의 코딩 마법사 여러분! 오늘 우리는 JavaScript의 흥미로운 비트 연산자 세계로 뛰어들어 보겠습니다. 지금 당신이 떠오르는 것은 "비트 연산자 뭐죠?"입니다. 걱정 마세요! 이 수업이 끝나면 당신은 프로처럼 비트를 조작할 수 있을 것입니다. 그럼 이 이진 어드벤처를 함께 시작해 보겠습니다!

JavaScript - Bitwise Operators

JavaScript 비트 연산자

비트 연산자는 JavaScript에서 숫자를 이진 수준에서 작업할 수 있게 해주는 특별한 도구입니다. 즉, 우리는 1과 0으로만 작업하는 것입니다. 컴퓨터가 내부적으로 하는 것과 같습니다. 무서워 보일 수 있지만, 익숙해지면 정말 재미있어집니다!

구체적인 내용으로 점프하기 전에, 우리가 다루게 될 모든 비트 연산자를 한눈에 보겠습니다:

연산자 이름 설명
& AND 두 비트가 모두 1인 경우 각 비트를 1로 설정
| OR 두 비트 중 하나가 1인 경우 각 비트를 1로 설정
^ XOR 두 비트 중 하나만 1인 경우 각 비트를 1로 설정
~ NOT 모든 비트를 반전
<< 왼쪽 이동 오른쪽에서 0을 채우며 왼쪽으로 이동
>> 오른쪽 이동 왼쪽에서 가장 왼쪽 비트를 채우며 오른쪽으로 이동
>>> 제로 채우기 오른쪽 이동 왼쪽에서 0을 채우며 오른쪽으로 이동

이제 하나씩 이를 풀어보겠습니다!

JavaScript 비트 AND (&) 연산자

비트 AND 연산자는 매우 엄격한 독점 클럽의 문을 여는 보안관입니다. 두 입력이 모두 1인 경우에만 1을 통과시킵니다. 그렇지 않으면 0입니다. 실제로 보겠습니다:

let a = 5;  // 0101 in binary
let b = 3;  // 0011 in binary
console.log(a & b);  // 0001 in binary, which is 1 in decimal

이 예제에서 우리는 5(0101)과 3(0011)을 비트별로 비교합니다. 오른쪽에서 두 번째 비트만 두 수 모두에서 1이므로, 그 비트만 통과합니다. 결과는 0001이며, 이는 10진수의 1입니다.

JavaScript 비트 OR (|) 연산자

비트 OR 연산자는 더 엄격하지 않은 경비입니다. 입력 중 하나가 1이면 통과시킵니다. 그 작동 방식을 보겠습니다:

let a = 5;  // 0101 in binary
let b = 3;  // 0011 in binary
console.log(a | b);  // 0111 in binary, which is 7 in decimal

여기서 우리는 5 또는 3 중 하나가 1인 곳에서 모두 1을 얻습니다. 결과는 0111이며, 이는 10진수의 7입니다.

JavaScript 비트 XOR (^) 연산자

XOR 연산자는 이상한 파티 게임과 같습니다. 모자나 목이 있어야 하지만, 두 가지를 모두 착용하면 안 됩니다! 비트가 다를 때만 1을 반환합니다. 확인해 보겠습니다:

let a = 5;  // 0101 in binary
let b = 3;  // 0011 in binary
console.log(a ^ b);  // 0110 in binary, which is 6 in decimal

비트가 다른 곳에서 1을 얻습니다 (오른쪽에서 두 번째와 세 번째 비트). 결과는 0110이며, 이는 10진수의 6입니다.

JavaScript 비트 NOT (~) 연산자

NOT 연산자는 반대 일입니다 - 모든 비트를 반전합니다. 하지만 JavaScript에서는 부호를 반전하고 1을 뺍니다. 보겠습니다:

let a = 5;  // 0101 in binary
console.log(~a);  // -6 in decimal

결과가 놀라울 수 있습니다! JavaScript는 음수 수를 두 배의 음수로 사용합니다. 따라서 ~5는 실제로 -6입니다.

비트 왼쪽 이동 (<<) 연산자

왼쪽 이동 연산자는 비트를 왼쪽으로 이동시키고 오른쪽에 0을 추가하는 컨베이어 벨트와 같습니다. 각 이동은 숫자를 두 배로 합니다:

let a = 5;  // 0101 in binary
console.log(a << 1);  // 1010 in binary, which is 10 in decimal
console.log(a << 2);  // 10100 in binary, which is 20 in decimal

5가 1번 이동으로 10이 되고, 2번 이동으로 20이 되는 것을 보세요. 마법과 같아요!

비트 오른쪽 이동 (>>) 연산자

오른쪽 이동 연산자는 반대로, 비트를 오른쪽으로 이동시킵니다. 이는 숫자를 절반으로 하지만 내림합니다:

let a = 5;  // 0101 in binary
console.log(a >> 1);  // 0010 in binary, which is 2 in decimal

5를 2로 나누면 2.5가 되지만, 내림하여 2가 됩니다.

제로 채우기 오른쪽 이동 (>>>)

이 연산자는 >>와 유사하지만, 음수 수의 경우 왼쪽에 0을 채웁니다:

let a = -5;  // 11111111111111111111111111111011 in binary (32-bit)
console.log(a >>> 1);  // 01111111111111111111111111111101 in binary, which is 2147483645 in decimal

이 연산자는 주로 숫자를 무 부호로 처리할 때 사용됩니다.

이제 여러분은 비트 연산자 세계로 첫 걸음을 뗐습니다! 이 연산자들은 처음에는 약간 모호할 수 있지만, 매우 유용합니다. 예를 들어, 이진 데이터를 작업하거나 해시 함수를 만들거나 특정 알고리즘을 최적화하는 데 사용됩니다.

기억하세요, 연습이 완벽을 이루는 것입니다. 이 연산자들을 조작해 보세요, 그러면 곧 비트를 마스터하게 될 것입니다! 행복하게 코딩하시고, 비트가 여러분과 함께 하기를 바랍니다!

Credits: Image by storyset