Bird
Raised Fist0
Embedded Cprogramming~10 mins

OR for setting bits in Embedded C - Step-by-Step Execution

Choose your learning style10 modes available
Concept Flow - OR for setting bits
Start with initial value
↓
Choose bit mask to set
↓
Apply OR operation: value | mask
↓
Result has bits set where mask has 1s
↓
End
Start with a number, pick bits to set using a mask, then use OR to turn those bits on without changing others.
Execution Sample
Embedded C
unsigned char value = 0x12;  // 00010010 in binary
unsigned char mask = 0x05;   // 00000101 in binary
value = value | mask;         // Set bits using OR
This code sets bits 0 and 2 of 'value' using OR with 'mask'.
Execution Table
Stepvalue (binary)mask (binary)OperationResult (binary)Result (hex)
10001001000000101value | mask000101110x17
20001011100000101No further operation000101110x17
💡 After OR, bits in mask are set in value; no more changes.
Variable Tracker
VariableStartAfter ORFinal
value0x12 (00010010)0x17 (00010111)0x17 (00010111)
mask0x05 (00000101)0x05 (00000101)0x05 (00000101)
Key Moments - 3 Insights
Why does OR set bits without clearing any existing bits?
Because OR with 1 always results in 1, so bits in mask turn on bits in value, but OR with 0 leaves bits unchanged (see execution_table step 1).
What happens to bits in value that are 1 but 0 in mask?
They stay 1 because OR with 0 keeps the original bit (see execution_table step 1, bits 4 and 1).
Why do we use OR instead of AND to set bits?
AND can only clear bits (set to 0), but OR can set bits to 1 without affecting others (see concept_flow).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table, what is the value of 'value' after the OR operation?
A0x17
B0x12
C0x05
D0x00
💡 Hint
Check the 'Result (hex)' column in execution_table step 1.
At which step does the value stop changing?
AStep 1
BStep 3
CStep 2
DStep 0
💡 Hint
Look at execution_table rows where operation is 'No further operation'.
If mask was 0x08 (00001000), what bit would be set in value after OR?
ABit 0
BBit 3
CBit 2
DBit 1
💡 Hint
Mask bits correspond to positions of 1s in binary; 0x08 has bit 3 set.
Concept Snapshot
OR for setting bits:
- Use bitwise OR (|) to set bits.
- Syntax: value = value | mask;
- Bits set to 1 in mask turn on those bits in value.
- Bits 0 in mask leave value bits unchanged.
- Useful to turn on flags without changing others.
Full Transcript
This visual trace shows how bitwise OR sets bits in a value. We start with an initial value 0x12 (binary 00010010). We choose a mask 0x05 (binary 00000101) to set bits 0 and 2. Applying OR combines bits: any bit set in mask becomes set in value. After OR, value becomes 0x17 (binary 00010111), with bits 0, 1, 2, and 4 set. The variable tracker shows value changing from 0x12 to 0x17, while mask stays the same. Key moments clarify why OR sets bits without clearing others and why AND is not used here. The quiz tests understanding of the value after OR, when changes stop, and which bit corresponds to a mask value. This helps beginners see how OR sets bits step-by-step.

Practice

(1/5)
1. What does the OR operation do when used to set bits in a variable in embedded C?
easy
A. It toggles specified bits from 0 to 1 or 1 to 0.
B. It clears specified bits to 0 without changing other bits.
C. It sets specified bits to 1 without changing other bits.
D. It shifts bits to the left by one position.

Solution

  1. Step 1: Understand OR operation effect on bits

    The OR operation sets bits to 1 if either bit is 1, so it can set bits without clearing others.
  2. Step 2: Apply to setting bits

    Using OR with a mask having 1s in desired positions sets those bits to 1, leaving others unchanged.
  3. Final Answer:

    It sets specified bits to 1 without changing other bits. -> Option C
  4. Quick Check:

    OR sets bits to 1 without clearing others [OK]
Hint: OR with mask sets bits to 1, leaves others unchanged [OK]
Common Mistakes:
  • Confusing OR with AND operation
  • Thinking OR clears bits instead of setting
  • Assuming OR toggles bits
  • Mixing OR with bit shifting
2. Which of the following is the correct syntax to set bits using OR in embedded C?
easy
A. variable |= mask;
B. variable = variable & mask;
C. variable = variable ^ mask;
D. variable &= ~mask;

Solution

  1. Step 1: Identify syntax for setting bits with OR

    The operator '|=' is the shorthand for 'variable = variable | mask;', which sets bits.
  2. Step 2: Check other options

    variable = variable & mask; uses AND, which clears bits; variable = variable ^ mask; uses XOR, which toggles bits; variable &= ~mask; clears bits using AND with negated mask.
  3. Final Answer:

    variable |= mask; -> Option A
  4. Quick Check:

    Use '|=' to set bits quickly [OK]
Hint: Use '|=' operator to set bits easily [OK]
Common Mistakes:
  • Using '&' instead of '|' to set bits
  • Confusing XOR (^) with OR (|)
  • Forgetting shorthand '|=' syntax
  • Using negation incorrectly
3. What is the value of flags after executing the following code?
unsigned char flags = 0x12;  // binary 00010010
unsigned char mask = 0x05;   // binary 00000101
flags = flags | mask;
medium
A. 0x05 (binary 00000101)
B. 0x17 (binary 00010111)
C. 0x10 (binary 00010000)
D. 0x07 (binary 00000111)

Solution

  1. Step 1: Convert values to binary and apply OR

    flags = 00010010, mask = 00000101. OR operation sets bits where either is 1.
  2. Step 2: Perform bitwise OR

    00010010 OR 00000101 = 00010111 (binary), which is 0x17 in hex.
  3. Final Answer:

    0x17 (binary 00010111) -> Option B
  4. Quick Check:

    0x12 | 0x05 = 0x17 [OK]
Hint: OR bits: 1 if either bit is 1 [OK]
Common Mistakes:
  • Adding values instead of ORing
  • Confusing OR with AND
  • Misreading binary values
  • Forgetting to convert hex to binary
4. Identify the error in the following code snippet that tries to set bits using OR:
unsigned int reg = 0x0F;
unsigned int mask = 0x30;
reg = reg & mask;
medium
A. Using '&' instead of '|' to set bits
B. Mask value is incorrect
C. Variable types should be 'char' not 'int'
D. Missing semicolon after mask declaration

Solution

  1. Step 1: Understand the intended operation

    The code aims to set bits using OR, but uses '&' which clears bits instead.
  2. Step 2: Identify correct operator

    To set bits, use '|' operator, so 'reg = reg | mask;' or 'reg |= mask;' is correct.
  3. Final Answer:

    Using '&' instead of '|' to set bits -> Option A
  4. Quick Check:

    Use '|' to set bits, '&' clears bits [OK]
Hint: Use '|' not '&' to set bits [OK]
Common Mistakes:
  • Confusing AND with OR
  • Assuming '&' sets bits
  • Ignoring operator precedence
  • Not testing code output
5. You have a 16-bit register reg initially set to 0x0000. You want to set bits 0, 3, and 15 to 1 without changing other bits. Which code correctly does this?
hard
A. reg = reg ^ ((1 << 0) | (1 << 3) | (1 << 15));
B. reg = reg & ((1 << 0) | (1 << 3) | (1 << 15));
C. reg |= (1 << 1) | (1 << 2) | (1 << 14);
D. reg |= (1 << 0) | (1 << 3) | (1 << 15);

Solution

  1. Step 1: Identify bits to set and create mask

    Bits 0, 3, and 15 correspond to (1<<0), (1<<3), and (1<<15). OR them to create mask.
  2. Step 2: Use OR assignment to set bits without changing others

    Use 'reg |= mask;' to set bits. reg |= (1 << 0) | (1 << 3) | (1 << 15); matches this.
  3. Step 3: Check other options

    reg = reg & ((1 << 0) | (1 << 3) | (1 << 15)); uses AND which clears bits; reg |= (1 << 1) | (1 << 2) | (1 << 14); sets wrong bits; reg = reg ^ ((1 << 0) | (1 << 3) | (1 << 15)); toggles bits which may not be desired.
  4. Final Answer:

    reg |= (1 << 0) | (1 << 3) | (1 << 15); -> Option D
  5. Quick Check:

    Use OR with mask of bits to set [OK]
Hint: Use '|=' with bit-shifted mask for setting bits [OK]
Common Mistakes:
  • Using '&' instead of '|' to set bits
  • Setting wrong bit positions
  • Using XOR which toggles bits
  • Not combining bits into one mask
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