A Developing Developer

[JavaScript] 제곱 수 여부 확인 & 비트 연산 본문

알고리즘

[JavaScript] 제곱 수 여부 확인 & 비트 연산

H-JJOO 2023. 6. 1. 16:56
 
function isPowerOf2(num) {
  return (num & (num - 1)) === 0;
}
 

'num' 과 'num - 1 ' 을 '&' 비트 연산자를 사용하여 비교한다.

 

비트연산 결과가 0 이면 'num' 은 2의 제곱수 이므로 'true' 를 반환, 그렇지 않으면 'false' 를 반환

 

※ 비트 연산

 

JavaScript에서 비트 연산자는 숫자 데이터를 비트 단위로 조작하는 데 사용된다.

 

이러한 연산자는 32비트의 정수형 숫자를 다루며,

주로 비트 단위의 조작,

비트 필드 조작,

비트 플래그 확인 등에 활용된다.

 

[JavaScript에서 사용되는 주요 비트 연산자]

 

1.비트 AND(&) :

두 비트의 각 자리를 AND 연산하여 해당 자리의 비트가 모두 1일 경우 1을 반환한다.

예를 들어, 5 & 3은 이진수로 101 & 011이 되어 001(10진수 1)이 된다.

 

2.비트 OR(|) :

두 비트의 각 자리를 OR 연산하여 해당 자리의 비트 중 하나 이상이 1일 경우 1을 반환한다.

예를 들어, 5 | 3은 이진수로 101 | 011이 되어 111(10진수 7)이 된다.

 

3. 비트 XOR(^) :

두 비트의 각 자리를 XOR 연산하여 해당 자리의 비트가 서로 다를 경우 1을 반환한다.

예를 들어, 5 ^ 3은 이진수로 101 ^ 011이 되어 110(10진수 6)이 됩니다.

 

4. 비트 NOT(~) :

비트를 반전시켜 모든 0은 1로, 모든 1은 0으로 변환한다.

예를 들어, ~5는 이진수로 ~00000000000000000000000000000101이 되어 11111111111111111111111111111010(10진수 -6)이 된다.

이 연산자는 단항 연산자로서 숫자를 피연산자로 사용한다.

 

5. 왼쪽 시프트(<<) :

숫자의 비트를 왼쪽으로 주어진 수만큼 이동시킨다.

왼쪽에 새로운 0 비트가 추가된다.

예를 들어, 5 << 1은 이진수로 101 << 1이 되어 1010(10진수 10)이 된다.?

 

6. 오른쪽 시프트(>>) :

숫자의 비트를 오른쪽으로 주어진 수만큼 이동시킨다.

오른쪽에 새로운 비트는 부호비트로 채워진다.

양수의 경우 0, 음수의 경우 1로 채워진다.

예를 들어, 5 >> 1은 이진수로 101 >> 1이 되어 10(10진수 2)이 된다.?

 

7. 부호 없는 오른쪽 시프트(>>>) :

숫자의 비트를 오른쪽으로 주어진 수만큼 이동시킨다.

오른쪽에 새로운 비트는 항상 0으로 채워진다.

예를 들어, -5 >>> 1은 이진수로 -101 >>> 1이 되어 2147483645(10진수)가 된다.?

 

비트 연산자는 주로 저수준의 비트 조작이 필요한 경우,

성능 최적화,

비트 필드 조작,

암호화 등의 작업에서 사용된다.

 

그러나 코드의 가독성을 해칠 수 있으므로 사용할 때 주의해야한다.

'알고리즘' 카테고리의 다른 글

[JavaScript] 정규식  (0) 2023.06.02
[JavaScript] match()  (0) 2023.06.02
[JavaScript] 필터링 함수 filter((el) => el)  (0) 2023.05.31
[JavaScript] 이진수의 합  (0) 2023.05.25
[JavaScript] 분할 할당  (0) 2023.05.22