Bird
Raised Fist0
Embedded Cprogramming~5 mins

Setting a specific bit in a register in Embedded C - Cheat Sheet & Quick Revision

Choose your learning style10 modes available
Recall & Review
beginner
What does it mean to set a specific bit in a register?
Setting a specific bit means changing that bit's value to 1 while leaving other bits unchanged.
Click to reveal answer
beginner
Which operator is commonly used in C to set a specific bit in a register?
The bitwise OR operator (|) is used to set a specific bit.
Click to reveal answer
intermediate
Explain the expression: register |= (1 << n);
It shifts 1 to the left by n positions to create a mask with only bit n set, then ORs it with the register to set bit n.
Click to reveal answer
intermediate
Why is it important to use bitwise OR instead of assignment when setting a bit?
Using OR preserves other bits in the register; assignment would overwrite all bits, losing existing data.
Click to reveal answer
beginner
Write a C code snippet to set bit 3 of a register named REG.
REG |= (1 << 3);
Click to reveal answer
What does the expression (1 << 5) do in C?
ASets bit 5 to 1
BShifts the number 1 left by 5 bits
CClears bit 5
DPerforms bitwise AND with 5
Which operator is used to set a bit without changing other bits?
A| (OR)
B^ (XOR)
C& (AND)
D~ (NOT)
What happens if you use assignment (=) instead of OR (|=) to set a bit?
AOnly the targeted bit is set
BAll bits are cleared
CThe entire register is overwritten, losing other bits
DNothing changes
How do you set bit 0 of a register named REG?
AREG &= ~(1 << 0);
BREG |= (1 >> 0);
CREG ^= (1 << 0);
DREG |= (1 << 0);
What is the result of REG |= (1 << n); if bit n was already set?
ABit n remains set
BRegister value becomes zero
CAll bits are cleared
DBit n is cleared
Describe how to set a specific bit in a register using C code.
Think about creating a mask with 1 shifted to the bit position.
You got /3 concepts.
    Explain why using |= is better than = when setting a bit in a register.
    Consider what happens to bits not targeted.
    You got /3 concepts.

      Practice

      (1/5)
      1. What does the expression REGISTER |= (1 << 3); do in embedded C?
      easy
      A. Clears the 3rd bit (bit position 2) of REGISTER to 0
      B. Sets the 4th bit (bit position 3) of REGISTER to 1 without changing other bits
      C. Toggles all bits of REGISTER
      D. Resets REGISTER to zero

      Solution

      1. Step 1: Understand bit shifting

        The expression 1 << 3 shifts the number 1 three places to the left, resulting in binary 00001000, which targets bit position 3.
      2. Step 2: Apply bitwise OR to set bit

        Using |= with this mask sets bit 3 to 1 in REGISTER without changing other bits.
      3. Final Answer:

        Sets the 4th bit (bit position 3) of REGISTER to 1 without changing other bits -> Option B
      4. Quick Check:

        Bit shift + OR sets specific bit = A [OK]
      Hint: Use |= with (1 << bit) to set that bit only [OK]
      Common Mistakes:
      • Confusing bit positions starting from 1 instead of 0
      • Using & instead of | to set bits
      • Thinking it clears bits instead of setting
      2. Which of the following is the correct syntax to set bit 5 of a register named PORTA?
      easy
      A. PORTA = 1 << 5;
      B. PORTA ^= (1 << 5);
      C. PORTA &= ~(1 << 5);
      D. PORTA |= (1 << 5);

      Solution

      1. Step 1: Identify correct operator to set bit

        To set a bit without affecting others, use bitwise OR assignment |= with a mask.
      2. Step 2: Check the bit mask and syntax

        1 << 5 creates a mask for bit 5. Combining with |= sets that bit.
      3. Final Answer:

        PORTA |= (1 << 5); -> Option D
      4. Quick Check:

        Use |= with shifted 1 to set bit [OK]
      Hint: Use |= with (1 << bit) to set bit correctly [OK]
      Common Mistakes:
      • Using = instead of |= overwrites all bits
      • Using &= ~ to clear bits, not set
      • Using ^= toggles bits instead of setting
      3. Given unsigned char REG = 0x12; (binary 00010010), what is the value of REG after executing REG |= (1 << 4);?
      medium
      A. 0x32
      B. 0x12
      C. 0x16
      D. 0x10

      Solution

      1. Step 1: Convert initial REG value to binary

        0x12 in binary is 00010010. Bit positions (0 to 7) from right to left.
      2. Step 2: Calculate mask and apply OR

        1 << 4 is 00010000 (bit 4 set). OR with 00010010 results in 00110010 (0x32).
      3. Final Answer:

        0x32 -> Option A
      4. Quick Check:

        0x12 | 0x10 = 0x32 [OK]
      Hint: Convert hex to binary, OR with mask, convert back [OK]
      Common Mistakes:
      • Miscounting bit positions starting from 1
      • Confusing hex and decimal values
      • Using &= or ^= instead of |=
      4. Identify the error in the following code snippet intended to set bit 2 of REG:
      unsigned char REG = 0x00;
      REG = REG & (1 << 2);
      medium
      A. Using & instead of | clears all bits except bit 2
      B. Bit shift operator << is used incorrectly
      C. REG should be declared as int, not unsigned char
      D. No error, code correctly sets bit 2

      Solution

      1. Step 1: Analyze bitwise AND usage

        The code uses & with mask (1 << 2), which clears all bits except bit 2.
      2. Step 2: Understand effect on REG

        Since REG starts at 0, AND with mask results in 0, not setting bit 2. To set bit 2, OR |= should be used.
      3. Final Answer:

        Using & instead of | clears all bits except bit 2 -> Option A
      4. Quick Check:

        Use |= to set bits, & clears bits [OK]
      Hint: Use |= to set bits, & clears bits [OK]
      Common Mistakes:
      • Confusing & and | operators
      • Assuming &= sets bits
      • Ignoring initial value of REG
      5. You have a 16-bit register REG16 initially set to 0x0000. Write the correct statement to set bits 0, 7, and 15 simultaneously without affecting other bits.
      hard
      A. REG16 = (1 << 0) | (1 << 7) | (1 << 15);
      B. REG16 = (1 << 0) & (1 << 7) & (1 << 15);
      C. REG16 |= (1 << 0) | (1 << 7) | (1 << 15);
      D. REG16 |= (1 << 0) & (1 << 7) & (1 << 15);

      Solution

      1. Step 1: Create mask for bits 0, 7, and 15

        Use bitwise OR to combine masks: (1 << 0) | (1 << 7) | (1 << 15) sets bits 0, 7, and 15.
      2. Step 2: Use |= to set bits without clearing others

        Using |= applies the mask to REG16, setting those bits while preserving others.
      3. Final Answer:

        REG16 |= (1 << 0) | (1 << 7) | (1 << 15); -> Option C
      4. Quick Check:

        Combine masks with | and set with |= [OK]
      Hint: Combine bit masks with | and set with |= [OK]
      Common Mistakes:
      • Using & instead of | to combine masks
      • Using = overwrites all bits, losing previous data
      • Using & instead of | in assignment
      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