📖 Scenario: Imagine you are working with a system that stores numbers in binary form. You want to find out how many bits are set to 1 in a given number. This is useful in many areas like error detection, cryptography, and network programming.
🎯 Goal: You will build a small program that counts the number of set bits (1s) in the binary representation of a number using the Brian Kernighan algorithm.
📋 What You'll Learn
Create a variable to hold the number to check
Create a variable to count the set bits
Use Brian Kernighan's algorithm to count set bits
Print the count of set bits
💡 Why This Matters
🌍 Real World
Counting set bits is useful in network masks, cryptography, and error detection where binary data is processed.
💼 Career
Understanding bitwise operations and efficient algorithms is important for software engineers working with low-level data processing, embedded systems, and performance optimization.
Progress0 / 4 steps
1
Create the number variable
Create a variable called number and set it to 29.
DSA Python
Hint
Use the assignment operator = to set number to 29.
2
Create the count variable
Create a variable called count and set it to 0 to keep track of set bits.
DSA Python
Hint
Initialize count to zero before counting bits.
3
Implement Brian Kernighan's algorithm
Use a while loop with the condition number != 0. Inside the loop, update number to number & (number - 1) and increment count by 1.
DSA Python
Hint
Brian Kernighan's algorithm repeatedly removes the rightmost set bit until the number becomes zero.
4
Print the count of set bits
Print the value of count using print(count).
DSA Python
Hint
The number 29 in binary is 11101, which has 4 set bits.
Practice
(1/5)
1. What does the Brian Kernighan algorithm do when counting set bits in a number?
easy
A. It shifts the number to the right until it becomes zero without counting bits.
B. It counts the total number of digits in the number.
C. It converts the number to a string and counts the characters.
D. It repeatedly clears the least significant set bit until the number becomes zero.
Solution
Step 1: Understand the algorithm's main operation
The Brian Kernighan algorithm clears the least significant set bit in each iteration by doing n = n & (n-1).
Step 2: Effect of clearing bits
Each clearing reduces the number of set bits by one until the number becomes zero, counting how many bits were set.
Final Answer:
It repeatedly clears the least significant set bit until the number becomes zero. -> Option D
Quick Check:
Clearing bits counts set bits [OK]
Hint: Clear rightmost set bit repeatedly to count bits [OK]
Common Mistakes:
Thinking it counts all digits, not just set bits
Confusing bit shifting with bit clearing
Counting characters in string form of number
2. Which of the following is the correct syntax to clear the least significant set bit in Python using Brian Kernighan's method?
easy
A. n = n & (n - 1)
B. n = n | (n - 1)
C. n = n ^ (n - 1)
D. n = n + (n - 1)
Solution
Step 1: Identify the bit clearing operation
The correct operation to clear the least significant set bit is n = n & (n - 1).
Step 2: Understand why other options are incorrect
Using OR, XOR, or addition does not clear the least significant set bit correctly.
Final Answer:
n = n & (n - 1) -> Option A
Quick Check:
Bit clear uses AND with n-1 [OK]
Hint: Use AND with n minus one to clear bits [OK]
Common Mistakes:
Using OR instead of AND
Using XOR which toggles bits
Adding numbers instead of bitwise operations
3. What is the output of the following Python code using Brian Kernighan's algorithm?
def count_set_bits(n):
count = 0
while n:
n = n & (n - 1)
count += 1
return count
print(count_set_bits(13))
medium
A. 3
B. 5
C. 4
D. 2
Solution
Step 1: Convert 13 to binary
13 in binary is 1101, which has three set bits (1s).
Step 2: Count set bits using the algorithm
Each iteration clears one set bit: 1101 -> 1100 -> 1000 -> 0000, total 3 times.
Final Answer:
3 -> Option A
Quick Check:
Binary 1101 has 3 set bits [OK]
Hint: Count 1s in binary of number [OK]
Common Mistakes:
Counting total bits instead of set bits
Miscounting binary digits
Confusing decimal with binary
4. Find the error in the following code that tries to count set bits using Brian Kernighan's algorithm:
def count_set_bits(n):
count = 0
while n > 0:
n = n & (n + 1)
count += 1
return count
print(count_set_bits(7))
medium
A. Loop condition should be n != 0
B. Missing initialization of count variable
C. Using n & (n + 1) instead of n & (n - 1)
D. Using addition instead of bitwise AND
Solution
Step 1: Identify the bit clearing operation
The code uses n & (n + 1), which does not clear the least significant set bit correctly.
Step 2: Correct operation for clearing bits
The correct operation is n = n & (n - 1) to clear the rightmost set bit.
Final Answer:
Using n & (n + 1) instead of n & (n - 1) -> Option C
Quick Check:
Use n & (n - 1) to clear bits [OK]
Hint: Use n & (n - 1), not n & (n + 1) [OK]
Common Mistakes:
Using n & (n + 1) which is incorrect
Confusing loop condition syntax
Forgetting to initialize count
5. Given a list of integers, which code snippet correctly uses Brian Kernighan's algorithm to return a list of counts of set bits for each number?
nums = [3, 5, 7]
A) def count_bits_list(nums):
return [bin(n).count('1') for n in nums]
B) def count_bits_list(nums):
def count_set_bits(n):
count = 0
while n:
n = n & (n - 1)
count += 1
return count
return [count_set_bits(n) for n in nums]
C) def count_bits_list(nums):
return [sum(int(d) for d in str(n)) for n in nums]
D) def count_bits_list(nums):
return [len(str(n)) for n in nums]
hard
A. Option A uses built-in count of '1's in binary string.
B. Option B uses Brian Kernighan's algorithm correctly.
C. Option C sums digits of decimal string, not bits.
D. Option D counts decimal digits, not bits.
Solution
Step 1: Analyze the code snippets
The first snippet uses Python's bin(n).count('1'), which counts set bits but not Brian Kernighan's algorithm. The second snippet implements the algorithm correctly using a while loop that clears the least significant set bit with n = n & (n - 1). The third sums the decimal digits, which is incorrect for bits. The fourth counts the length of the decimal string, also incorrect.
Step 2: Confirm correct implementation
The second snippet defines count_set_bits using n = n & (n - 1) in a loop and applies it to each number via list comprehension, which is the proper use of Brian Kernighan's algorithm.
Final Answer:
Option B uses Brian Kernighan's algorithm correctly. -> Option B
Quick Check:
Correctly uses n & (n-1) loop [OK]
Hint: Use n & (n - 1) loop inside list comprehension [OK]
Common Mistakes:
Using string digit sums instead of bits
Counting decimal digits instead of set bits
Confusing built-in binary count with algorithm
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.