mirror of
https://github.com/trekhleb/javascript-algorithms.git
synced 2025-12-08 19:06:00 +00:00
* Get Bit: Make more terse * Power of two: Allowed 1 as a valid power of 2. Power of two: Removed unnecessary exception throwing. * Fisher Yates: Made more terse * Least Common Multiple: Fill undefined value * Greatest Common Divisor: Fill undefined value. Greatest Common Divisor: Make more terse.
27 lines
675 B
JavaScript
27 lines
675 B
JavaScript
/**
|
|
* @param {number} number
|
|
* @return {boolean}
|
|
*/
|
|
export default function isPowerOfTwoBitwise(number) {
|
|
// 1 (2^0) is the smallest power of two.
|
|
if (number < 1) {
|
|
return false;
|
|
}
|
|
|
|
/*
|
|
* Powers of two in binary look like this:
|
|
* 1: 0001
|
|
* 2: 0010
|
|
* 4: 0100
|
|
* 8: 1000
|
|
*
|
|
* Note that there is always exactly 1 bit set. The only exception is with a signed integer.
|
|
* e.g. An 8-bit signed integer with a value of -128 looks like:
|
|
* 10000000
|
|
*
|
|
* So after checking that the number is greater than zero, we can use a clever little bit
|
|
* hack to test that one and only one bit is set.
|
|
*/
|
|
return (number & (number - 1)) === 0;
|
|
}
|