Discover how tiny switches inside your computer can be controlled with just a few clever commands!
Why Bit manipulation techniques? - Purpose & Use Cases
Imagine you want to check if a light switch is ON or OFF in a huge control panel with hundreds of switches. Doing this by looking at each switch one by one is tiring and slow.
Manually checking or changing each switch (bit) takes a lot of time and can easily cause mistakes, especially when you have many switches to handle. It's like counting hundreds of tiny lights by hand.
Bit manipulation lets you quickly check, turn on, or turn off switches using simple, fast commands. It's like having a magic remote that controls many switches at once without errors.
if (((number / 2) % 2) == 1) { /* bit 1 is set */ }
if (number & (1 << 1)) { /* bit 1 is set */ }
Bit manipulation enables lightning-fast control and checks of individual bits inside numbers, making programs efficient and powerful.
In games, bit manipulation helps track which keys are pressed or which power-ups are active, all packed neatly in one number.
Manual bit checks are slow and error-prone.
Bit manipulation uses simple operations to handle bits quickly.
This technique makes programs faster and easier to manage.
Practice
& do when applied between two bits?Solution
Step 1: Understand bitwise AND operation
The bitwise AND operator compares each bit of two numbers and returns 1 only if both bits are 1.Step 2: Apply to bits
For example, 1 & 1 = 1, but 1 & 0 = 0 and 0 & 0 = 0.Final Answer:
Returns 1 only if both bits are 1 -> Option DQuick Check:
AND = 1 if both bits 1 [OK]
- Confusing AND with OR operator
- Thinking AND flips bits
- Assuming AND always returns 1
num in C?Solution
Step 1: Understand setting a bit
To set a bit means to make it 1 without changing other bits. We use OR with a mask that has 1 at the target bit.Step 2: Use bit shift and OR
The mask is created by shifting 1 left by 3 (1 << 3). OR-ing num with this mask sets the 3rd bit.Final Answer:
num = num | (1 << 3); -> Option AQuick Check:
Set bit = OR with shifted 1 [OK]
- Using AND instead of OR to set bits
- Using XOR which toggles bits
- Shifting num instead of 1
unsigned int x = 5; // binary 0101
x = x ^ (1 << 2);
printf("%u", x);Solution
Step 1: Understand initial value and mask
x = 5 in binary is 0101. The mask is (1 << 2) = 0100 (decimal 4).Step 2: Apply XOR operation
XOR toggles bits where mask has 1. 0101 ^ 0100 = 1101 (decimal 7). Let's do bitwise XOR:
Bits (3 2 1 0):
5 = 0 1 0 1
Mask = 0 1 0 0
XOR = 0 0 0 1 is incorrect.
Actually, bits are:
Bit 3: 0 ^ 0 = 0
Bit 2: 1 ^ 1 = 0
Bit 1: 0 ^ 0 = 0
Bit 0: 1 ^ 0 = 1
Result: 0001 (decimal 1) is incorrect for toggling bit 2.
Wait, bit 2 is the third bit from right (0-indexed). So bits are:
Bit 0: least significant bit
Bit 1: next
Bit 2: next
So 5 (0101) bits:
Bit 3: 0
Bit 2: 1
Bit 1: 0
Bit 0: 1
XOR with mask 0100:
Bit 3: 0 ^ 0 = 0
Bit 2: 1 ^ 1 = 0
Bit 1: 0 ^ 0 = 0
Bit 0: 1 ^ 0 = 1
Result: 0001 (decimal 1). So output is 1.
Therefore, correct answer is 1 -> 1.Final Answer:
1 -> Option BQuick Check:
XOR toggles bit 2: 5 ^ 4 = 1 [OK]
- Miscounting bit positions (0-indexed from right)
- Confusing XOR with OR or AND
- Incorrect binary to decimal conversion
num:unsigned int num = 14; // binary 1110
num = num & (1 << 1);
printf("%u", num);Solution
Step 1: Understand clearing a bit
To clear a bit, we AND with a mask that has 0 at the target bit and 1s elsewhere.Step 2: Analyze given mask
The mask (1 << 1) is 00010 (binary), which has 1 only at bit 1. AND-ing num with this mask keeps only bit 1 and clears others, not what we want.Step 3: Correct mask usage
We should invert the mask: ~ (1 << 1), so bit 1 is 0 and others 1, then AND with num to clear bit 1.Final Answer:
Mask should be inverted before AND -> Option AQuick Check:
Clear bit = AND with inverted mask [OK]
- Using mask without inversion to clear bits
- Using OR instead of AND to clear bits
- Confusing bit positions
flags is set (1). Which code snippet correctly does this and prints "Set" if true, otherwise "Not set"?Solution
Step 1: Understand checking a bit
To check if a bit is set, AND the number with a mask having 1 at that bit. If result is not zero, bit is set.Step 2: Analyze options
if ((flags & (1 << 4)) != 0) printf("Set"); else printf("Not set"); uses (flags & (1 << 4)) != 0 which correctly checks the 4th bit.
if ((flags | (1 << 4)) == 0) printf("Set"); else printf("Not set"); uses OR and compares to zero, which is incorrect.
if ((flags ^ (1 << 4)) == 1) printf("Set"); else printf("Not set"); uses XOR and compares to 1, which is incorrect.
if ((flags & (1 << 3)) != 0) printf("Set"); else printf("Not set"); checks bit 3 instead of 4, so wrong bit.Final Answer:
if ((flags & (1 << 4)) != 0) printf("Set"); else printf("Not set"); -> Option CQuick Check:
Check bit = AND with mask != 0 [OK]
- Using OR or XOR to check bits
- Checking wrong bit position
- Comparing AND result incorrectly
Ready to prove it?
Pass the test and this pattern moves unknown
