Determine if a Number is a Power of Two in JavaScript

javascript

Is there a more effective way to return true if n is a power of two or false if not?

function isPowerOfTwo(n) {
  return Math.pow(2, Math.round(Math.log(n) / Math.log(2)));
}

Best Answer

You can actually use ECMAScript5 Math.log:

function powerOfTwo(x) {
    return (Math.log(x)/Math.log(2)) % 1 === 0;
}

Remember, in math, to get a logarithm with an arbitrary base, you can just divide log10 of the operand (x in this case) by log10 of the base. And then to see if the number is a regular integer (and not a floating point), just check if the remainder is 0 by using the modulus % operator.

In ECMAScript6 you can do something like this:

function powerOfTwo(x) {
    return Math.log2(x) % 1 === 0;
}

See the MDN docs for Math.log2.