What if you could flip any switch instantly without touching the others?
Why Set Clear Toggle a Specific Bit in DSA C?
Imagine you have a huge control panel with hundreds of tiny switches, each representing a feature turned on or off. You want to change just one switch without touching the others.
Manually checking and flipping each switch one by one is slow and prone to mistakes. You might accidentally flip the wrong switch or forget to flip the right one.
Using bit operations, you can directly set, clear, or toggle a specific switch (bit) in a number without affecting the others. This is fast, precise, and error-free.
int flags = 0; // To set bit 3 manually: flags = flags + 8; // 8 is 1 << 3 // To clear bit 3 manually: flags = flags - 8;
int flags = 0; // Set bit 3 flags |= (1 << 3); // Clear bit 3 flags &= ~(1 << 3); // Toggle bit 3 flags ^= (1 << 3);
This lets you control individual features or options efficiently using just numbers, saving memory and speeding up your program.
In video games, bit flags control player abilities like flying or invisibility. Setting or clearing bits quickly changes these abilities without complex code.
Manual bit changes are slow and error-prone.
Bit operations let you change one bit without affecting others.
This makes programs faster and simpler when managing many on/off options.
Practice
num |= (1 << k) do to the integer num?Solution
Step 1: Understand the bit shift operation
1 << kcreates a number with only the k-th bit set to 1 and others 0.Step 2: Apply bitwise OR to set the 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 DQuick Check:
Set bit = OR with 1 shifted [OK]
- Confusing set with clear operation
- Using AND instead of OR to set bits
- Misunderstanding bit positions starting from 0
num?Solution
Step 1: Understand clearing a bit
Clearing means setting the bit to 0. We use AND with the complement of the bit mask.Step 2: Analyze the options
num &= ~(1 << k);clears the k-th bit by ANDing with all 1s except 0 at k-th bit.Final Answer:
num &= ~(1 << k); -> Option BQuick Check:
Clear bit = AND with NOT of shifted 1 [OK]
- Using OR instead of AND to clear bits
- Forgetting to negate the mask
- Using XOR which toggles instead of clears
int num = 10; // binary 1010
int k = 1;
num ^= (1 << k);
printf("%d", num);Solution
Step 1: Understand initial value and bit positions
num = 10 (binary 1010), k = 1 means second bit from right (0-based).Step 2: Apply XOR to toggle the k-th bit
Toggle bit 1: bit at position 1 is 1 in 1010, toggling it changes to 0, so binary becomes 1000 which is 8.Final Answer:
8 -> Option CQuick Check:
Toggle bit 1 in 1010 = 1000 = 8 [OK]
- Confusing toggle with set or clear
- Miscounting bit positions starting from 1 instead of 0
- Assuming XOR always sets bit
num. What is the error?int num = 15; // binary 1111 int k = 3; num = num & (1 << k);
Solution
Step 1: Analyze the bitwise AND operation
The code doesnum & (1 << k), which keeps only the k-th bit and clears others.Step 2: Understand the intended operation
To clear the k-th bit, we must AND with the complement of the bit mask, not the mask itself.Final Answer:
It clears all bits except the 3rd bit -> Option AQuick Check:
AND with mask keeps only that bit, not clears it [OK]
- Using mask instead of its complement to clear bit
- Confusing AND with OR for clearing bits
- Assuming AND with mask clears bit
num simultaneously. Which expression correctly does this in C?Solution
Step 1: Understand toggling multiple bits
Toggling bits uses XOR. To toggle multiple bits, XOR with mask having those bits set.Step 2: Create mask for bits 0 and 2
Mask is(1 << 0) | (1 << 2), which sets bits 0 and 2 to 1.Step 3: Apply XOR with mask
Expressionnum ^= (1 << 0) | (1 << 2);toggles both bits simultaneously.Final Answer:
num ^= (1 << 0) | (1 << 2); -> Option AQuick Check:
XOR with combined mask toggles multiple bits [OK]
- Using AND or OR instead of XOR for toggling
- Incorrectly combining masks with AND
- Misusing shift operations in toggle
Ready to prove it?
Pass the test and this pattern moves unknown
