📖 Scenario: Imagine you are working with a system that needs to quickly check if certain numbers are powers of two. Powers of two are numbers like 1, 2, 4, 8, 16, and so on. This is useful in many areas like computer memory allocation or game development.
🎯 Goal: You will write a Go program that checks if a given number is a power of two using a simple and efficient method.
📋 What You'll Learn
Create a variable called number with the value 16
Create a variable called isPowerOfTwo to store the result of the check
Use a bitwise operation to check if number is a power of two
Print the value of isPowerOfTwo
💡 Why This Matters
🌍 Real World
Checking if a number is a power of two is useful in computer memory management, graphics programming, and optimizing algorithms.
💼 Career
Understanding bitwise operations and efficient checks is important for software developers, especially those working in systems programming, embedded systems, or game development.
Progress0 / 4 steps
1
Create the number variable
Create a variable called number and set it to 16.
DSA Go
Hint
Use number := 16 to create the variable.
2
Add a variable to store the check result
Create a variable called isPowerOfTwo and set it to false initially.
DSA Go
Hint
Initialize isPowerOfTwo with false.
3
Check if number is power of two using bitwise operation
Set isPowerOfTwo to the result of the expression number > 0 && (number & (number - 1)) == 0.
DSA Go
Hint
This expression checks if number is greater than zero and has only one bit set.
4
Print the result
Use fmt.Println(isPowerOfTwo) to print the value of isPowerOfTwo. Remember to import fmt.
DSA Go
Hint
Use fmt.Println(isPowerOfTwo) to show the result.
Practice
(1/5)
1. Which of the following statements correctly describes a number that is a power of two?
easy
A. It has exactly one bit set to 1 in its binary form.
B. It is always an odd number.
C. It is divisible by 3.
D. It has all bits set to 1 in its binary form.
Solution
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. For example, 4 is 100 in binary.
Step 2: Analyze the options
The statement "It has exactly one bit set to 1 in its binary form" matches the binary property of powers of two. The other options do not: powers of two (except 1) are even, not divisible by 3, and do not have all bits set to 1.
Final Answer:
It has exactly one bit set to 1 in its binary form. -> Option A
Quick Check:
Power of two = one '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 powers of two with numbers divisible by 3
Assuming all bits are set to 1
2. Which of the following Go code snippets correctly checks if an integer n is a power of two?
easy
A. if n & (n + 1) == 0 { /* power of two */ }
B. if n | (n - 1) == 0 { /* power of two */ }
C. if n & (n - 1) == 0 { /* power of two */ }
D. if n ^ (n - 1) == 0 { /* power of two */ }
Solution
Step 1: Understand bitwise check for power of two
The expression n & (n - 1) == 0 is true only if n is a power of two (and n > 0).
Step 2: Analyze each option
The snippet if n & (n - 1) == 0 { /* power of two */ } uses the correct bitwise AND operation. The others use incorrect bitwise operations that do not correctly check for power of two.
Final Answer:
if n & (n - 1) == 0 { /* power of two */ } -> Option C
Quick Check:
Use n & (n-1) == 0 to check power of two [OK]
Hint: Use n & (n-1) == 0 to check power of two [OK]
Common Mistakes:
Using bitwise OR instead of AND
Using n + 1 instead of n - 1
Using XOR which does not work here
3. What is the output of the following Go code?
package main
import "fmt"
func main() {
n := 16
if n > 0 && (n & (n - 1)) == 0 {
fmt.Println("Power of Two")
} else {
fmt.Println("Not Power of Two")
}
}
medium
A. Runtime Error
B. Power of Two
C. Compilation Error
D. Not Power of Two
Solution
Step 1: Evaluate the condition for n = 16
16 in binary is 10000. 16 - 1 = 15 (binary 01111). Bitwise AND: 10000 & 01111 = 0.
Step 2: Check the if condition
Since n > 0 and bitwise AND is 0, the condition is true, so it prints "Power of Two".
Final Answer:
Power of Two -> Option B
Quick Check:
16 & 15 == 0 means power of two [OK]
Hint: Check if n & (n-1) == 0 and n > 0 [OK]
Common Mistakes:
Ignoring n > 0 check
Misunderstanding bitwise AND result
Assuming all even numbers are powers of two
4. The following Go code is intended to check if n is a power of two. What is the error?
A. The function should return an integer, not bool.
B. The bitwise AND operator is used incorrectly.
C. The parentheses around n - 1 are unnecessary and cause error.
D. It does not handle the case when n is zero or negative.
Solution
Step 1: Understand the function logic
The expression n & (n - 1) == 0 returns true for powers of two and also for zero.
Step 2: Identify missing check
Zero and negative numbers are not powers of two, but this function returns true for zero. It lacks a check for n > 0.
Final Answer:
It does not handle the case when n is zero or negative. -> Option D
Quick Check:
Check n > 0 before bitwise test [OK]
Hint: Always check n > 0 before bitwise power of two test [OK]
Common Mistakes:
Not checking for n > 0
Misusing bitwise operators
Assuming parentheses cause error
5. You want to write a Go function that returns true if a number n is a power of two, but also handles zero and negative inputs correctly. Which of the following implementations is correct?
hard
A. func isPowerOfTwo(n int) bool {
return n > 0 && (n & (n - 1)) == 0
}
B. func isPowerOfTwo(n int) bool {
return n >= 0 && (n | (n - 1)) == 0
}
C. func isPowerOfTwo(n int) bool {
return n != 0 && (n & (n + 1)) == 0
}