Bird
Raised Fist0
DSA C++programming~5 mins

Check if Number is Power of Two in DSA C++ - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Check if Number is Power of Two
O(1)
Understanding Time Complexity

We want to know how fast we can check if a number is a power of two.

The question is: how does the time needed change as the number gets bigger?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


bool isPowerOfTwo(int n) {
    if (n <= 0) return false;
    return (n & (n - 1)) == 0;
}
    

This code checks if a number is a power of two using a bitwise trick.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: A single bitwise AND operation and subtraction.
  • How many times: Exactly once, no loops or recursion.
How Execution Grows With Input

The time to check does not grow with the size of the number.

Input Size (n)Approx. Operations
101 operation
1001 operation
10001 operation

Pattern observation: The number of operations stays the same no matter how big the number is.

Final Time Complexity

Time Complexity: O(1)

This means the check happens in constant time, instantly regardless of input size.

Common Mistake

[X] Wrong: "Checking if a number is a power of two requires looping through all bits or dividing repeatedly."

[OK] Correct: The bitwise trick does the check in one step without loops, making it very fast.

Interview Connect

Knowing this quick check shows you understand bitwise operations and efficiency, a useful skill in many coding problems.

Self-Check

"What if we used a loop to divide the number by 2 repeatedly until it is 1? How would the time complexity change?"

Practice

(1/5)
1. Which of the following statements correctly describes a number that is a power of two?
easy
A. It has all bits set to 1 in its binary form.
B. It has exactly one bit set to 1 in its binary form.
C. It is divisible by 3.
D. It is always an odd number.

Solution

  1. Step 1: Understand binary representation of powers of two

    A power of two in binary has exactly one '1' bit and the rest are '0's, e.g., 4 is 100.
  2. Step 2: Check other options

    Odd numbers can have many bits set; divisibility by 3 is unrelated; all bits set to 1 means numbers like 7 (111), not powers of two.
  3. Final Answer:

    It has exactly one bit set to 1 in its binary form. -> Option B
  4. Quick Check:

    Power of two = single 1 bit [OK]
Hint: Power of two has only one '1' bit in binary [OK]
Common Mistakes:
  • Thinking powers of two are always odd
  • Confusing all bits set to 1 with power of two
  • Assuming divisibility by 3 means power of two
2. Which of the following C++ expressions correctly checks if an integer n is a power of two?
easy
A. (n & (n + 1)) == 0
B. (n | (n - 1)) == 0
C. (n & (n - 1)) == 0 && n > 0
D. (n ^ (n - 1)) == 0

Solution

  1. Step 1: Understand bitwise check for power of two

    The expression (n & (n - 1)) == 0 is true only if n has exactly one bit set, and n > 0 ensures positive numbers.
  2. Step 2: Analyze other options

    (n | (n - 1)) == 0 uses OR which doesn't check power of two; (n & (n + 1)) == 0 uses n + 1 which is incorrect; (n ^ (n - 1)) == 0 uses XOR which is unrelated.
  3. Final Answer:

    (n & (n - 1)) == 0 && n > 0 -> Option C
  4. Quick Check:

    Bitwise AND with n-1 zero means power of two [OK]
Hint: Use (n & (n-1)) == 0 and n > 0 to check power of two [OK]
Common Mistakes:
  • Using OR or XOR instead of AND
  • Not checking if n is positive
  • Using n + 1 instead of n - 1
3. What is the output of the following C++ code?
int n = 16;
if ((n & (n - 1)) == 0 && n > 0) {
    std::cout << "Power of Two";
} else {
    std::cout << "Not Power of Two";
}
medium
A. Power of Two
B. Not Power of Two
C. Compilation Error
D. Runtime Error

Solution

  1. Step 1: Evaluate the expression for n = 16

    16 in binary is 10000; 16 - 1 = 15 (01111). Bitwise AND: 10000 & 01111 = 0, condition true.
  2. Step 2: Check if n > 0

    16 > 0 is true, so whole condition is true and "Power of Two" is printed.
  3. Final Answer:

    Power of Two -> Option A
  4. Quick Check:

    16 & 15 == 0 and 16 > 0 [OK]
Hint: Check bitwise AND with n-1 equals zero for power of two [OK]
Common Mistakes:
  • Miscomputing bitwise AND
  • Ignoring the n > 0 check
  • Confusing output strings
4. The following code is intended to check if n is a power of two, but it has a bug. What is the bug?
bool isPowerOfTwo(int n) {
    return (n & (n - 1)) == 0;
}
medium
A. It does not check if n is positive, so zero or negative numbers return true incorrectly.
B. The bitwise AND operator is used incorrectly; it should be OR.
C. The function should return an integer, not bool.
D. The expression should be (n | (n - 1)) == 0.

Solution

  1. Step 1: Analyze the expression without positivity check

    The expression returns true for n=0 because 0 & -1 = 0, which is incorrect since 0 is not a power of two.
  2. Step 2: Identify missing condition

    Adding n > 0 fixes the bug by excluding zero and negative numbers.
  3. Final Answer:

    It does not check if n is positive, so zero or negative numbers return true incorrectly. -> Option A
  4. Quick Check:

    Check n > 0 to avoid zero/negative false positives [OK]
Hint: Always check n > 0 when using bitwise power of two test [OK]
Common Mistakes:
  • Ignoring zero and negative inputs
  • Using OR instead of AND
  • Wrong return type assumptions
5. You want to write a function that returns the smallest power of two greater than or equal to a given positive integer n. Which approach correctly achieves this in C++?
hard
A. Return n ^ (n - 1) to get the smallest power of two.
B. Return n & (n - 1) to get the smallest power of two.
C. Return n | (n - 1) to get the smallest power of two.
D. Use a loop to shift 1 left until the value is >= n.

Solution

  1. Step 1: Understand the problem

    We need the smallest power of two >= n, so we start from 1 and keep doubling (shifting left) until we reach or pass n.
  2. Step 2: Analyze options

    Use a loop to shift 1 left until the value is >= n. uses a loop with left shift which correctly finds the smallest power of two >= n. Options B, C, D use bitwise operations that do not produce this result.
  3. Final Answer:

    Use a loop to shift 1 left until the value is >= n. -> Option D
  4. Quick Check:

    Shift 1 left until >= n to find smallest power of two [OK]
Hint: Shift 1 left repeatedly until >= n to find next power of two [OK]
Common Mistakes:
  • Using bitwise AND/OR/XOR incorrectly for this problem
  • Not handling cases where n is already a power of two
  • Assuming bitwise ops alone give next power of two
Recommended

Ready to prove it?

Pass the test and this pattern moves unknown strong while earning +1 Grip toward your certificate.

10 questions~5 mineasy hard