본문 바로가기
카테고리 없음

<<, >> 쉬프트 연산자

by limew 2023. 11. 27.

이진수로 표현된 숫자의 비트들을 << 왼쪽, >> 오른쪽으로 지정된 수만큼 이동시킨다

 

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