How to write 4 different functions that check if a number is a power of 2 in JavaScript

1 Answer

0 votes
// Method A: Bit-counting
function isPowerOfTwoA(x) {
    if (x <= 0) return false;
    return x.toString(2).split("1").length - 1 === 1;
}

// Method B: Bitwise trick
function isPowerOfTwoB(x) {
    return x > 0 && (x & (x - 1)) === 0;
}

// Method C: Repeated division
function isPowerOfTwoC(x) {
    if (x <= 0) return false;
    while (x % 2 === 0) {
        x /= 2;
    }
    return x === 1;
}

// Method D: Using logarithms
function isPowerOfTwoD(x) {
    if (x <= 0) return false;
    const logv = Math.log2(x);
    return Math.abs(logv - Math.round(logv)) < 1e-10;
}

const test1 = 16; // true
const test2 = 18; // false

console.log("A:", isPowerOfTwoA(test1), ",", isPowerOfTwoA(test2));
console.log("B:", isPowerOfTwoB(test1), ",", isPowerOfTwoB(test2));
console.log("C:", isPowerOfTwoC(test1), ",", isPowerOfTwoC(test2));
console.log("D:", isPowerOfTwoD(test1), ",", isPowerOfTwoD(test2));



/*
OUTPUT:

A: true , false
B: true , false
C: true , false
D: true , false

*/

 



answered Apr 2 by avibootz

Related questions

...