Set Clear Toggle a Specific Bit in DSA Javascript - Time & Space 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?
Analyze the time complexity of the following code snippet.
function setBit(num, pos) {
return num | (1 << pos);
}
function clearBit(num, pos) {
return num & ~(1 << pos);
}
function toggleBit(num, pos) {
return num ^ (1 << pos);
}
This code sets, clears, or toggles a bit at a given position in a number using bitwise operations.
Identify the loops, recursion, array traversals that repeat.
- Primary operation: Single bitwise operation per function call.
- How many times: Exactly once per call, no loops or recursion.
Changing one bit takes the same steps no matter how big the number is.
| Input Size (n) | Approx. Operations |
|---|---|
| 10 | 1 |
| 100 | 1 |
| 1000 | 1 |
Pattern observation: The operation count stays constant regardless of input size.
Time Complexity: O(1)
This means the time to set, clear, or toggle a bit does not change as the number gets bigger.
[X] Wrong: "Changing a bit takes longer if the number is bigger because there are more bits."
[OK] Correct: Bitwise operations directly access the bit position without checking others, so time stays the same.
Knowing that bit operations run in constant time helps you write efficient low-level code and answer questions confidently.
"What if we tried to set multiple bits at once? How would the time complexity change?"
Practice
num | (1 << k) do to the number num in terms of bits?Solution
Step 1: Understand bitwise OR with shifted 1
The expression1 << kcreates a number with only the k-th bit set to 1.Step 2: Apply OR operation to set bit
Usingnum | (1 << k)sets the k-th bit ofnumto 1 without changing other bits.Final Answer:
Sets the k-th bit of num to 1 -> Option BQuick Check:
Bitwise OR with 1 at position k sets that bit [OK]
- Confusing set with clear operation
- Thinking it toggles the bit
- Assuming it checks the bit instead
num?Solution
Step 1: Understand clearing a bit
To clear the k-th bit, we want to set it to 0 while keeping others unchanged.Step 2: Use AND with NOT mask
The mask~(1 << k)has all bits 1 except the k-th bit 0. ANDing with this clears the k-th bit.Final Answer:
num & ~(1 << k) -> Option DQuick Check:
AND with inverted mask clears bit [OK]
- Using OR instead of AND to clear bits
- Forgetting to invert the mask
- Using XOR which toggles instead of clears
let num = 10; // binary 1010 let k = 1; num = num ^ (1 << k); console.log(num);
Solution
Step 1: Understand initial values and bit positions
num = 10 (binary 1010), k = 1 means second bit from right (0-based).Step 2: Apply XOR to toggle k-th bit
1 << 1= 2 (binary 0010). XOR toggles bit 1: 1010 ^ 0010 = 1000 (binary), which is 8 decimal.Final Answer:
8 -> Option AQuick Check:
XOR toggles bit 1: 10 -> 8 [OK]
- Confusing XOR with OR or AND
- Miscounting bit positions (0-based)
- Not converting binary to decimal correctly
num. What is the error?function toggleBit(num, k) {
return num & (1 << k);
}
console.log(toggleBit(5, 0));Solution
Step 1: Identify intended toggle operation
Toggling a bit requires flipping it: 0 to 1 or 1 to 0.Step 2: Check the operator used
The code uses AND (&) which masks bits, not toggles. XOR (^) is needed to toggle bits.Final Answer:
Using AND instead of XOR to toggle the bit -> Option CQuick Check:
Toggle needs XOR, not AND [OK]
- Using AND or OR instead of XOR for toggle
- Confusing toggle with set or clear
- Ignoring operator precedence
updateBit(num, k, bitValue) that sets the k-th bit of num to bitValue (0 or 1). Which of the following implementations is correct?Solution
Step 1: Clear the k-th bit first
Usenum & ~(1 << k)to clear the k-th bit regardless of its current value.Step 2: Set the k-th bit to bitValue
ShiftbitValueto k-th position and OR it with cleared number to set the bit correctly.Final Answer:
return (num & ~(1 << k)) | (bitValue << k); -> Option AQuick Check:
Clear then set bit with OR [OK]
- Using XOR which toggles instead of sets
- Not clearing bit before setting
- Using AND which masks bits incorrectly
Ready to prove it?
Pass the test and this pattern moves unknown
