Bird
Raised Fist0
DSA Cprogramming~10 mins

Count Set Bits Brian Kernighan Algorithm in DSA C - Execution Trace

Choose your learning style10 modes available
Concept Flow - Count Set Bits Brian Kernighan Algorithm
Start with number n
↓
Check if n != 0?
No→Done, return count
Yes↓
Remove rightmost set bit: n = n & (n-1)
↓
Increment count
↩Back to Check n != 0
The algorithm repeatedly removes the rightmost set bit from the number and counts how many times this happens until the number becomes zero.
Execution Sample
DSA C
int countSetBits(int n) {
    int count = 0;
    while (n != 0) {
        n = n & (n - 1);
        count++;
    }
    return count;
}
Counts how many bits are set to 1 in the binary form of n by removing one set bit at a time.
Execution Table
StepOperationn (binary)n (decimal)CountVisual State
1Start00001011110Initial number 11 (binary 1011)
2Remove rightmost set bit: n = n & (n-1)00001010101Removed rightmost set bit from 1011 to 1010
3Remove rightmost set bit: n = n & (n-1)0000100082Removed rightmost set bit from 1010 to 1000
4Remove rightmost set bit: n = n & (n-1)0000000003Removed rightmost set bit from 1000 to 0000
5Check n != 00000000003n is zero, stop loop
💡 n becomes 0 at step 5, loop ends with count = 3
Variable Tracker
VariableStartAfter Step 2After Step 3After Step 4Final
n (decimal)1110800
count01233
Key Moments - 3 Insights
Why does the algorithm use n = n & (n-1) to remove the rightmost set bit?
Because n & (n-1) clears the rightmost set bit in n, reducing the number of set bits by one each time, as shown in execution_table steps 2 to 4.
Why does the loop stop when n becomes zero?
When n is zero, there are no set bits left to count, so the loop ends as shown in execution_table step 5.
How does the count variable relate to the number of set bits?
Count increments each time a set bit is removed, so at the end it equals the total number of set bits, as tracked in variable_tracker.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of n (decimal) after step 3?
A10
B8
C0
D11
💡 Hint
Check the 'n (decimal)' column in execution_table row for step 3
At which step does the count variable become 2?
AStep 2
BStep 4
CStep 3
DStep 5
💡 Hint
Look at the 'Count' column in execution_table and variable_tracker after each step
If the input number n was 8 instead of 11, how many steps would the loop run before stopping?
A1
B2
C3
D4
💡 Hint
8 in binary is 1000, which has only one set bit; check how many times the loop removes set bits
Concept Snapshot
Count Set Bits using Brian Kernighan's Algorithm:
- Initialize count = 0
- While n != 0:
  - n = n & (n-1) removes rightmost set bit
  - Increment count
- Return count as total set bits
Efficiently counts set bits by skipping zeros.
Full Transcript
This visualization shows how Brian Kernighan's algorithm counts the number of set bits in an integer. Starting with the number n, the algorithm repeatedly removes the rightmost set bit by performing n = n & (n-1). Each removal increments a count. The process continues until n becomes zero, meaning no set bits remain. The execution table traces each step with the binary and decimal values of n, the count, and the visual state of the number. The variable tracker shows how n and count change after each operation. Key moments clarify why the bit removal works and why the loop stops. The quiz tests understanding of the steps and variable values. This method is efficient because it only loops as many times as there are set bits, not the total number of bits.

Practice

(1/5)
1. What does the Brian Kernighan algorithm do when counting set bits in a number?
easy
A. It repeatedly clears the least significant set bit until the number becomes zero.
B. It counts the total number of digits in the binary representation.
C. It shifts the number right and counts zeros.
D. It converts the number to decimal and counts digits.

Solution

  1. Step 1: Understand the algorithm's main operation

    The algorithm uses n = n & (n-1) to clear the least significant set bit in each iteration.
  2. Step 2: Effect of clearing bits

    Each operation reduces the number of set bits by one until the number becomes zero.
  3. Final Answer:

    It repeatedly clears the least significant set bit until the number becomes zero. -> Option A
  4. Quick Check:

    Clearing bits one by one = It repeatedly clears the least significant set bit until the number becomes zero. [OK]
Hint: Clear least set bit repeatedly to count set bits [OK]
Common Mistakes:
  • Counting zeros instead of ones
  • Shifting without clearing bits
  • Confusing decimal digits with bits
2. Which of the following is the correct syntax to clear the least significant set bit in C 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

  1. Step 1: Recall the bit clearing operation

    The Brian Kernighan algorithm clears the least significant set bit by n = n & (n - 1).
  2. Step 2: Verify other options

    Options A, B, and D do not clear the least significant set bit correctly.
  3. Final Answer:

    n = n & (n - 1); -> Option A
  4. Quick Check:

    Use n & (n-1) to clear bits [OK]
Hint: Use n & (n-1) to clear least set bit [OK]
Common Mistakes:
  • Using +1 instead of -1
  • Using OR or XOR instead of AND
  • Confusing bitwise operators
3. What is the output of the following C code snippet?
unsigned int n = 13; // binary 1101
int count = 0;
while (n) {
  n = n & (n - 1);
  count++;
}
printf("%d", count);
medium
A. 5
B. 2
C. 4
D. 3

Solution

  1. Step 1: Analyze initial value and binary form

    13 in binary is 1101, which has three set bits (1s).
  2. Step 2: Count iterations clearing bits

    Each loop clears one set bit: 1101 -> 1100 -> 1000 -> 0000, so loop runs 3 times.
  3. Final Answer:

    3 -> Option D
  4. Quick Check:

    Number of set bits in 13 = 3 [OK]
Hint: Count set bits by clearing one bit per loop [OK]
Common Mistakes:
  • Counting total bits instead of set bits
  • Off-by-one in loop count
  • Misreading binary representation
4. Identify the error in this C code snippet that tries to count set bits using Brian Kernighan's algorithm:
int countSetBits(int n) {
  int count = 0;
  while (n != 0) {
    n = n & (n + 1);
    count++;
  }
  return count;
}
medium
A. Missing initialization of count variable.
B. Using n + 1 instead of n - 1 in bit clearing step.
C. Incorrect return type of the function.
D. Loop condition should be while (n > 0).

Solution

  1. Step 1: Check the bit clearing operation

    The code uses n = n & (n + 1), which does not clear the least significant set bit correctly.
  2. Step 2: Correct operation for clearing bits

    The correct operation is n = n & (n - 1) to clear the least significant set bit.
  3. Final Answer:

    Using n + 1 instead of n - 1 in bit clearing step. -> Option B
  4. Quick Check:

    Use n & (n-1) to clear bits, not n & (n+1) [OK]
Hint: Use n & (n-1) to clear bits, not n & (n+1) [OK]
Common Mistakes:
  • Using +1 instead of -1
  • Ignoring loop condition correctness
  • Forgetting to initialize count
5. Given an array of unsigned integers, which approach using Brian Kernighan's algorithm is most efficient to find the total count of set bits in all elements?
hard
A. Shift each number bit by bit and count set bits using bitwise AND with 1.
B. Convert each number to binary string and count '1's using string functions.
C. For each element, repeatedly clear least significant set bit and count until zero, then sum counts.
D. Use a lookup table for each byte and sum counts for all bytes in each number.

Solution

  1. Step 1: Identify Brian Kernighan's approach

    For each element, repeatedly clear least significant set bit and count until zero, then sum counts.: For each element, repeatedly clear the least significant set bit until zero and count (using n = n & (n-1)), then sum the counts across elements. This is the direct application of Brian Kernighan's algorithm.
  2. Step 2: Why it is most efficient using Brian Kernighan

    B (strings) is slow; C (shifts) is O(word size) always; D (lookup) is fast but a separate method, not Brian Kernighan's. Brian Kernighan excels for sparse bits (O(set bits) time).
  3. Final Answer:

    For each element, repeatedly clear least significant set bit and count until zero, then sum counts. -> Option C
  4. Quick Check:

    Brian Kernighan on array: apply n & (n-1) loop per element [OK]
Hint: Brian Kernighan per element: clear LSB until zero, sum counts [OK]
Common Mistakes:
  • Using string conversion which is slow
  • Bit shifting each bit without optimization
  • Confusing lookup table with Brian Kernighan method
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