📖 Scenario: You are working with a microcontroller that reads sensor data packed into a single byte. Each bit in this byte represents a different sensor's status (on or off). You need to extract the status of specific sensors by masking bits.
🎯 Goal: Learn how to use the AND operator to mask bits and extract specific sensor statuses from a byte.
📋 What You'll Learn
Create a variable called sensor_data with the exact value 0b10101100 (binary literal).
Create a variable called mask with the exact value 0b00000100 to select the third bit.
Use the AND operator with sensor_data and mask to create a variable called masked_result.
Print the value of masked_result as an integer.
💡 Why This Matters
🌍 Real World
Microcontrollers often pack multiple sensor statuses into one byte. Masking bits helps read each sensor's status separately.
💼 Career
Embedded systems engineers use bit masking to efficiently handle hardware signals and sensor data.
Progress0 / 4 steps
1
Create the sensor data variable
Create an unsigned 8-bit variable called sensor_data and set it to the binary value 0b10101100.
Embedded C
Hint
Use unsigned char for an 8-bit variable and binary literal 0b10101100.
2
Create the mask variable
Create an unsigned 8-bit variable called mask and set it to the binary value 0b00000100 to select the third bit.
Embedded C
Hint
The mask should have only the third bit set to 1.
3
Apply the AND operator to mask bits
Use the AND operator & with sensor_data and mask to create an unsigned 8-bit variable called masked_result.
Embedded C
Hint
The AND operator & keeps bits that are 1 in both variables.
4
Print the masked result
Write a printf statement to print the value of masked_result as an integer.
Embedded C
Hint
Use printf("%d\n", masked_result); inside main().
Practice
(1/5)
1. What does the bitwise AND operation with a mask do in embedded C?
easy
A. It adds the mask value to the original number.
B. It keeps only the bits where the mask has 1s and turns off others.
C. It flips all bits in the original number.
D. It shifts the bits to the left by the mask value.
Solution
Step 1: Understand bitwise AND with mask
The AND operation compares each bit of two numbers and returns 1 only if both bits are 1.
Step 2: Apply mask logic
Using a mask with 1s keeps those bits from the original number; 0s turn off bits.
Final Answer:
It keeps only the bits where the mask has 1s and turns off others. -> Option B
Quick Check:
AND with mask = keep bits [OK]
Hint: Mask with 1 keeps bits; 0 clears bits [OK]
Common Mistakes:
Thinking AND flips bits
Confusing AND with addition
Assuming AND shifts bits
2. Which of the following is the correct syntax to mask the lower 4 bits of a variable val in embedded C?
easy
A. val & 0xF
B. val | 0xF
C. val << 4
D. val ^ 0xF
Solution
Step 1: Identify mask for lower 4 bits
Lower 4 bits mask is 0xF (binary 00001111).
Step 2: Apply bitwise AND syntax
Use val & 0xF to keep only lower 4 bits.
Final Answer:
val & 0xF -> Option A
Quick Check:
AND with 0xF masks lower 4 bits [OK]
Hint: Use & with 0xF to keep lower 4 bits [OK]
Common Mistakes:
Using OR instead of AND
Using XOR which toggles bits
Using shift instead of mask
3. What is the output of the following code?
unsigned char val = 0xAB; // 10101011 in binary
unsigned char mask = 0x0F; // 00001111 in binary
unsigned char result = val & mask;
printf("%02X", result);
4. The following code is intended to mask the upper 4 bits of val, but it does not work as expected. What is the error?
unsigned char val = 0xAB; // 10101011
unsigned char mask = 0xF0; // 11110000
unsigned char result = val | mask;
printf("%X", result);
medium
A. Mask value is incorrect
B. Missing parentheses around expression
C. Variable types are wrong
D. Using OR (|) instead of AND (&) for masking
Solution
Step 1: Understand masking operation
Masking to keep bits requires AND (&), not OR (|).
Step 2: Identify incorrect operator
The code uses OR which sets bits instead of masking.
Final Answer:
Using OR (|) instead of AND (&) for masking -> Option D
Quick Check:
Masking needs AND, not OR [OK]
Hint: Mask bits with & not | [OK]
Common Mistakes:
Using OR instead of AND
Changing mask value unnecessarily
Assuming parentheses fix bitwise errors
5. You have a 16-bit sensor data stored in uint16_t data. The upper 8 bits represent temperature, and the lower 8 bits represent humidity. How do you extract only the temperature value using AND masking?
hard
A. temperature = (data | 0xFF00) >> 8;
B. temperature = data & 0x00FF;
C. temperature = (data & 0xFF00) >> 8;
D. temperature = data >> 8;
Solution
Step 1: Identify mask for upper 8 bits
Upper 8 bits mask is 0xFF00 (binary 11111111 00000000).
Step 2: Apply AND and shift right
Use (data & 0xFF00) to keep upper bits, then shift right 8 to get value.
Final Answer:
temperature = (data & 0xFF00) >> 8; -> Option C
Quick Check:
Mask upper 8 bits and shift right [OK]
Hint: Mask upper bits with 0xFF00 then shift right 8 [OK]
Common Mistakes:
Masking lower bits instead
Using OR instead of AND
Forgetting to shift after masking
Recommended
Ready to prove it?
Pass the test and this pattern moves unknownstrongwhile earning +1 Grip toward your certificate.