Computer >> 컴퓨터 >  >> 프로그래밍 >> JavaScript

자바스크립트 비트 연산으로 숫자가 2의 거듭제곱인지 판별하는 방법

숫자를 입력받아 해당 숫자가 2의 거듭제곱인지 여부를 판별하는 자바스크립트 함수를 작성해야 합니다.

예시 −

f(23) = false
f(16) = true
f(1) = true
f(1024) = true

접근 방법

2의 거듭제곱 수를 이진수로 표현하면 항상 단 하나의 비트만 1로 설정되어 있다는 특징이 있습니다.

1: 0001
2: 0010
4: 0100
8: 1000

따라서 먼저 숫자가 0보다 큰지 확인한 후, 비트 연산 트릭을 활용해 딱 하나의 비트만 켜져 있는지 검사할 수 있습니다.

num & (num - 1)

이 연산의 원리는 다음과 같습니다. 2의 거듭제곱에서 1을 빼면 설정된 비트 아래의 모든 비트가 1로 바뀌므로, 원래 값과 AND(&) 연산을 하면 결과가 반드시 0이 됩니다. 만약 2의 거듭제곱이 아니라면 두 개 이상의 비트가 남아 결과가 0이 되지 않습니다.

예제 코드

다음은 전체 구현 코드입니다 −

const num1 = 256;
const num2 = 1024;
const isPowerOfTwo = (num = 1) => {
    if (num < 1) {
        return false;
    };
    return (num & (num - 1)) === 0;
};
console.log(isPowerOfTwo(num1));
console.log(isPowerOfTwo(num2));
console.log(isPowerOfTwo(1));
console.log(isPowerOfTwo(23));

출력 결과

콘솔에 출력되는 결과는 다음과 같습니다 −

true
true
true
false