이진수로 표현된 숫자의 비트들을 << 왼쪽, >> 오른쪽으로 지정된 수만큼 이동시킨다
a >> b
a를 오른쪽으로 b만큼 자리를 이동
const a = 14; // 11101
const b = 3;
console.log(a >> b); // 1
14를 이진수로 나타내면 11101이고 이를 오른쪽으로 3번 이동하면 1이다.
이는 주로 비트연산이나 효율적인 방식으로 곱하거나 나눌때 사용된다
i >> 1
i를 2로 나누는 연산과 동일하다.
i의 가장 오른쪽 자리수를 제거한다.
i가 짝수인지 홀수인지 판단하기 i & a
& 는 비트 단위 AND연산자이며 이를 이용하여 이진수로 표현된 i의 가장 오른쪽 자리를 체크한다.
짝수이면 0, 홀수이면 a를 반환한다.
>>>
부호와 상관없이 오른쪽으로 시프트 연산을 수행하고 왼쪽 빈자리는 0으로 채운다
const positive = 14;
const negative = -14;
const a = 3;
console.log(positive >>> a); // 1
console.log(negative >>> a); // 536870910
비트 연산자를 사용하여 이진표현에서 1의 개수 구하기
function countOnes(num) {
let count = 0;
while (num !== 0) {
count += num & 1; // num과 1을 비트 AND 연산하여 1이 있는지 확인
num >>= 1; // 오른쪽으로 비트 이동하여 다음 비트 확인
}
return count;
}
console.log(countOnes(7)); // 7의 이진 표현은 '111', 결과는 3
console.log(countOnes(15)); // 15의 이진 표현은 '1111', 결과는 4