Bird
Raised Fist0
DSA C#programming~5 mins

Set Clear Toggle a Specific Bit in DSA C# - Time & Space Complexity

Choose your learning style10 modes available
Time Complexity: Set Clear Toggle a Specific Bit
O(1)
Understanding Time Complexity

We want to understand how long it takes to change a single bit in a number.

How does the time needed grow when we work with bigger numbers?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


int SetBit(int num, int pos) {
    return num | (1 << pos);
}

int ClearBit(int num, int pos) {
    return num & ~(1 << pos);
}

int ToggleBit(int num, int pos) {
    return num ^ (1 << pos);
}
    

This code sets, clears, or toggles a specific bit at position pos in the integer num.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Bitwise shift and bitwise AND, OR, XOR operations.
  • How many times: Each operation runs once per function call, no loops or recursion.
How Execution Grows With Input

Changing one bit uses a fixed number of steps regardless of number size.

Input Size (bits in number)Approx. Operations
103 operations (shift, mask, bitwise op)
323 operations (same fixed steps)
643 operations (still fixed steps)

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

Final Time Complexity

Time Complexity: O(1)

This means changing one bit takes the same amount of time no matter how big the number is.

Common Mistake

[X] Wrong: "Changing a bit takes longer for bigger numbers because there are more bits to check."

[OK] Correct: The operation directly targets the bit using a shift and mask, so it does not check other bits one by one.

Interview Connect

Knowing that bit operations run in constant time helps you explain efficient low-level code clearly and confidently.

Self-Check

"What if we wanted to set multiple bits at once? How would the time complexity change?"

Practice

(1/5)
1. What does the operation number |= (1 << position) do to the bit at position in number?
easy
A. Toggles the bit at position
B. Clears the bit at position to 0
C. Sets the bit at position to 1
D. Checks if the bit at position is set

Solution

  1. Step 1: Understand the bitwise OR with shifted 1

    The expression 1 << position creates a number with only the bit at position set to 1. Using OR (|=) with this sets that bit in number to 1 without changing other bits.
  2. Step 2: Effect on the bit at position

    Since OR with 1 always results in 1, the bit at position is set to 1 regardless of its previous value.
  3. Final Answer:

    Sets the bit at position to 1 -> Option C
  4. Quick Check:

    OR with 1 sets bit [OK]
Hint: Use OR with shifted 1 to set a bit [OK]
Common Mistakes:
  • Confusing OR with XOR for toggling
  • Thinking it clears the bit
  • Assuming it checks the bit instead
2. Which of the following C# statements correctly clears (sets to 0) the bit at position pos in an integer num?
easy
A. num &= ~(1 << pos);
B. num |= (1 << pos);
C. num ^= (1 << pos);
D. num = num << pos;

Solution

  1. Step 1: Understand clearing a bit

    To clear a bit, we use AND with the complement of a mask that has 1 at the target bit. The mask is 1 << pos, so complement is ~(1 << pos).
  2. Step 2: Apply AND with complemented mask

    Using num &= ~(1 << pos); clears the bit at pos while leaving others unchanged.
  3. Final Answer:

    num &= ~(1 << pos); -> Option A
  4. Quick Check:

    AND with complement clears bit [OK]
Hint: Use AND with NOT mask to clear a bit [OK]
Common Mistakes:
  • Using OR instead of AND to clear
  • Using XOR which toggles instead of clears
  • Using left shift alone which changes number
3. What is the output of the following C# code?
int num = 10; // binary 1010
int pos = 1;
num ^= (1 << pos);
Console.WriteLine(num);
medium
A. 10
B. 14
C. 12
D. 8

Solution

  1. Step 1: Understand initial number and bit position

    Number 10 in binary is 1010. Position 1 means the second bit from right (0-based). Bit at position 1 is 1.
  2. Step 2: Apply XOR to toggle bit at position 1

    XOR toggles the bit. Since bit at position 1 is 1, toggling it changes it to 0. New binary is 1000 which is decimal 8.
  3. Final Answer:

    8 -> Option D
  4. Quick Check:

    Toggle bit 1 in 1010 = 1000 = 8 [OK]
Hint: XOR toggles bit; 1 becomes 0, 0 becomes 1 [OK]
Common Mistakes:
  • Confusing XOR with OR or AND
  • Miscounting bit positions (0-based)
  • Assuming no change if bit is 1
4. The following code is intended to toggle the bit at position pos in num. What is the error?
int num = 5; // binary 0101
int pos = 2;
num = num & (1 << pos);
Console.WriteLine(num);
medium
A. It clears all bits except the one at pos
B. It toggles the bit correctly
C. It sets the bit at pos to 1
D. It causes a syntax error

Solution

  1. Step 1: Analyze the operation used

    The code uses AND (&) with 1 << pos. This keeps only the bit at pos if it was set, clearing all others.
  2. Step 2: Compare with toggle operation

    Toggling requires XOR (^), not AND. So this code does not toggle but masks all bits except the one at pos.
  3. Final Answer:

    It clears all bits except the one at pos -> Option A
  4. Quick Check:

    AND with mask keeps only that bit [OK]
Hint: Use XOR to toggle, AND masks bits [OK]
Common Mistakes:
  • Using AND instead of XOR for toggle
  • Expecting toggle but getting masked value
  • Confusing bitwise operators
5. You have an integer num and want to toggle the bit at position pos only if it is currently set (1). Which code snippet correctly does this?
hard
A. if ((num ^ (1 << pos)) != 0) num ^= (1 << pos);
B. if ((num & (1 << pos)) != 0) num ^= (1 << pos);
C. if ((num & ~(1 << pos)) != 0) num ^= (1 << pos);
D. if ((num | (1 << pos)) != 0) num ^= (1 << pos);

Solution

  1. Step 1: Check if bit at pos is set

    Using num & (1 << pos) checks if bit at pos is 1. If result is not zero, bit is set.
  2. Step 2: Toggle bit only if set

    If bit is set, toggle it using XOR: num ^= (1 << pos);. This flips the bit from 1 to 0.
  3. Final Answer:

    if ((num & (1 << pos)) != 0) num ^= (1 << pos); -> Option B
  4. Quick Check:

    Check bit with AND, toggle with XOR [OK]
Hint: Check bit with AND before toggling with XOR [OK]
Common Mistakes:
  • Using OR instead of AND to check bit
  • Toggling without checking bit first
  • Using incorrect mask complement
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