Discover a simple trick that turns a slow, boring task into a lightning-fast check!
Why Check if Number is Power of Two in DSA Typescript?
Imagine you have a big list of numbers, and you want to find out which ones are powers of two, like 1, 2, 4, 8, 16, and so on. Doing this by hand means checking each number by dividing it repeatedly by 2 until you reach 1 or find a remainder.
This manual method is slow and boring, especially if the list is long. It's easy to make mistakes when dividing many times, and it wastes a lot of time that could be used for other tasks.
Using a simple check with bitwise operations, we can quickly tell if a number is a power of two without dividing. This method is fast, clean, and works perfectly even for very large numbers.
function isPowerOfTwo(num: number): boolean {
if (num < 1) return false;
while (num % 2 === 0) {
num = num / 2;
}
return num === 1;
}function isPowerOfTwo(num: number): boolean {
return num > 0 && (num & (num - 1)) === 0;
}This lets you instantly check if a number is a power of two, enabling faster programs and smarter decisions in tasks like memory allocation, game development, and more.
In computer games, checking if a number is a power of two helps in optimizing textures and memory, making games run smoother and look better.
Manual division to check powers of two is slow and error-prone.
Bitwise check is a fast and reliable solution.
This technique is useful in many programming and real-world scenarios.
Practice
Solution
Step 1: Understand the definition of power of two
A number is a power of two if it equals 2 raised to an integer exponent, like 2^0=1, 2^1=2, 2^2=4, etc.Step 2: Check other options
Odd numbers, divisibility by 3, or primality do not define powers of two.Final Answer:
It can be written as 2 raised to some integer exponent -> Option CQuick Check:
Power of two = 2^n [OK]
- Thinking all powers of two are odd
- Confusing powers of two with prime numbers
- Assuming divisibility by 3 means power of two
n is a power of two using bitwise operations?Solution
Step 1: Understand the bitwise check for power of two
The expressionn & (n - 1)clears the lowest set bit. For powers of two, this results in zero.Step 2: Analyze each option
return n > 0 && (n & (n - 1)) === 0; uses the correct bitwise AND with (n-1). Options A, B, and C use incorrect bitwise operators or operands.Final Answer:
return n > 0 && (n & (n - 1)) === 0; -> Option AQuick Check:
Bitwise AND with (n-1) = 0 means power of two [OK]
- Using bitwise OR instead of AND
- Using (n + 1) instead of (n - 1)
- Forgetting to check n > 0
function isPowerOfTwo(n: number): boolean {
return n > 0 && (n & (n - 1)) === 0;
}
console.log(isPowerOfTwo(16));
console.log(isPowerOfTwo(18));Solution
Step 1: Check isPowerOfTwo(16)
16 in binary is 10000. 16 & 15 (01111) = 0, so returns true.Step 2: Check isPowerOfTwo(18)
18 in binary is 10010. 18 & 17 (10001) = 16 (not zero), so returns false.Final Answer:
true false -> Option DQuick Check:
16 is power of two, 18 is not [OK]
- Assuming 18 is power of two because it's even
- Ignoring the n > 0 condition
- Misreading bitwise AND results
function checkPower(n: number): boolean {
return (n & (n - 1)) === 0;
}Solution
Step 1: Analyze the function logic
The function uses bitwise AND correctly but does not check if n is positive.Step 2: Understand why n > 0 is needed
Without n > 0, input 0 returns true incorrectly because 0 & -1 = 0.Final Answer:
Missing check for n > 0 to avoid false positives -> Option AQuick Check:
Check n > 0 before bitwise test [OK]
- Ignoring zero or negative inputs
- Assuming bitwise alone is enough
- Misunderstanding bitwise AND behavior
const numbers = [0, 1, 2, 3, 4, 5, 8, 16, 18]; const powersOfTwo = numbers.filter(n => ???); console.log(powersOfTwo);
Solution
Step 1: Understand the filter condition
We want to keep numbers that are powers of two, so the condition must check n > 0 and bitwise AND with (n-1) equals zero.Step 2: Evaluate each option
n > 0 && (n & (n - 1)) === 0 correctly uses the standard power of two check. Options B, C, and D use incorrect bitwise operations or conditions.Final Answer:
n > 0 && (n & (n - 1)) === 0 -> Option BQuick Check:
Filter with bitwise AND and n > 0 [OK]
- Using bitwise OR or XOR instead of AND
- Not checking n > 0
- Using (n + 1) instead of (n - 1)
Ready to prove it?
Pass the test and this pattern moves unknown
