Bird
Raised Fist0
DSA Goprogramming~5 mins

Set Clear Toggle a Specific Bit in DSA Go - 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 fast operations like setting, clearing, or toggling a specific bit run.

How does the time to change one bit grow as the number size grows?

Scenario Under Consideration

Analyze the time complexity of the following code snippet.


func setBit(num int, pos uint) int {
    return num | (1 << pos)
}

func clearBit(num int, pos uint) int {
    return num &^ (1 << pos)
}

func toggleBit(num int, pos uint) int {
    return num ^ (1 << pos)
}
    

This code sets, clears, or toggles a bit at a given position in an integer using bitwise operations.

Identify Repeating Operations

Identify the loops, recursion, array traversals that repeat.

  • Primary operation: Single bitwise operation (shift and bitwise OR/AND/XOR)
  • How many times: Exactly once per function call, no loops or recursion
How Execution Grows With Input

Changing one bit takes the same amount of work no matter how big the number is.

Input Size (bits)Approx. Operations
101
1001
10001

Pattern observation: The operation count stays constant regardless of input size.

Final Time Complexity

Time Complexity: O(1)

This means the time to set, clear, or toggle a bit does not grow with the size of the number; it is always constant.

Common Mistake

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

[OK] Correct: Bitwise operations directly access the bit position without checking others, so time stays the same.

Interview Connect

Knowing that bit operations run in constant time helps you write efficient low-level code and answer questions confidently.

Self-Check

"What if we tried to set multiple bits one by one in a loop? How would the time complexity change?"

Practice

(1/5)
1. What does the operation num |= (1 << 3) do to the number num?
easy
A. Sets the 4th bit of num to 1
B. Clears the 4th bit of num to 0
C. Toggles the 4th bit of num
D. Checks if the 4th bit of num is set

Solution

  1. Step 1: Understand bit shifting

    The expression 1 << 3 shifts 1 left by 3 bits, resulting in binary 00001000, which targets the 4th bit.
  2. Step 2: Apply bitwise OR to set bit

    Using |= with this mask sets the 4th bit of num to 1 without changing other bits.
  3. Final Answer:

    Sets the 4th bit of num to 1 -> Option A
  4. Quick Check:

    Set bit = |= (1 << position) [OK]
Hint: Use OR with shifted 1 to set a bit [OK]
Common Mistakes:
  • Confusing set with clear operation
  • Using wrong bit position (off by one)
  • Thinking it toggles instead of sets
2. Which of the following Go code snippets correctly clears the 2nd bit (bit index 1) of an integer variable num?
easy
A. num &= (1 << 1)
B. num |= (1 << 1)
C. num &= ^(1 << 1)
D. num ^= (1 << 1)

Solution

  1. Step 1: Identify clearing operation

    To clear a bit, we AND num with the inverse mask that has 0 at the target bit and 1 elsewhere.
  2. Step 2: Use bitwise AND with negated mask

    ^(1 << 1) creates a mask with all bits 1 except the 2nd bit 0. ANDing clears that bit.
  3. Final Answer:

    num &= ^(1 << 1) -> Option C
  4. Quick Check:

    Clear bit = &= ^(1 << position) [OK]
Hint: Use AND with negated shifted 1 to clear bit [OK]
Common Mistakes:
  • Using OR instead of AND to clear
  • Not negating the mask
  • Confusing bit index counting
3. What is the output of the following Go code?
package main
import "fmt"
func main() {
    num := 10 // binary 1010
    num ^= (1 << 1)
    fmt.Println(num)
}
medium
A. 10
B. 8
C. 12
D. 14

Solution

  1. Step 1: Understand initial value and bit positions

    Number 10 in binary is 1010. Bit positions (0-based) from right: bit0=0, bit1=1, bit2=0, bit3=1.
  2. Step 2: Toggle 2nd bit (bit index 1) using XOR

    XOR with (1 << 1) toggles bit1. Bit1 is 1, toggling it changes to 0. New binary: 1000 which is 8.
  3. Final Answer:

    8 -> Option B
  4. Quick Check:

    Toggle bit = ^= (1 << position) [OK]
Hint: XOR toggles bit: 1->0 or 0->1 [OK]
Common Mistakes:
  • Confusing toggle with set or clear
  • Misreading bit positions
  • Calculating decimal incorrectly
4. The following Go code is intended to clear the 3rd bit (bit index 2) of num. What is the error?
num := 15
num &= (1 << 2)
medium
A. It sets the 3rd bit instead of clearing it
B. No error, it correctly clears the 3rd bit
C. It toggles the 3rd bit instead of clearing
D. It clears all bits except the 3rd bit

Solution

  1. Step 1: Analyze the operation performed

    The code does num &= (1 << 2), which ANDs num with 00000100 (only 3rd bit set).
  2. Step 2: Understand effect on bits

    This clears all bits except the 3rd bit, effectively keeping only the 3rd bit if it was set, not clearing it.
  3. Final Answer:

    It clears all bits except the 3rd bit -> Option D
  4. Quick Check:

    Clear bit = &= ^(1 << position) [OK]
Hint: Use AND with negated mask to clear bit [OK]
Common Mistakes:
  • Using AND with mask instead of negated mask
  • Confusing clear with set or toggle
  • Assuming &= (1 << n) clears bit
5. You have an integer num initially 0. You want to toggle the 1st bit, set the 3rd bit, and clear the 2nd bit in this order. Which sequence of operations achieves this correctly in Go?
hard
A. num ^= (1 << 0); num |= (1 << 2); num &= ^(1 << 1)
B. num |= (1 << 0); num ^= (1 << 2); num &= ^(1 << 1)
C. num &= ^(1 << 1); num ^= (1 << 0); num |= (1 << 2)
D. num |= (1 << 2); num ^= (1 << 0); num &= ^(1 << 1)

Solution

  1. Step 1: Toggle 1st bit (bit 0)

    Use XOR with (1 << 0) to toggle the 1st bit: num ^= (1 << 0).
  2. Step 2: Set 3rd bit (bit 2)

    Use OR with (1 << 2) to set the 3rd bit: num |= (1 << 2).
  3. Step 3: Clear 2nd bit (bit 1)

    Use AND with negated mask to clear 2nd bit: num &= ^(1 << 1).
  4. Final Answer:

    num ^= (1 << 0); num |= (1 << 2); num &= ^(1 << 1) -> Option A
  5. Quick Check:

    Toggle, Set, Clear in order with ^=, |=, &= ^ [OK]
Hint: Toggle ^=, Set |=, Clear &= ^ in correct order [OK]
Common Mistakes:
  • Mixing order of operations
  • Using wrong operators for each action
  • Not negating mask when clearing
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