Register Bitfields Using Struct Overlay

Code

#include <stdio.h>
#include <stdint.h>

typedef union {
    struct {
        uint8_t enable    : 1;
        uint8_t mode      : 2;
        uint8_t interrupt : 1;
        uint8_t reserved  : 4;
    } bits;
    uint8_t reg;
} ControlRegister;

int main() {
    uint8_t e, m, i;
    scanf("%hhu %hhu %hhu", &e, &m, &i);

    ControlRegister cr;
    cr.reg = 0;

    cr.bits.enable = e & 1;
    cr.bits.mode = m & 3;
    cr.bits.interrupt = i & 1;
    cr.bits.reserved = 0;

    printf("%u\n", cr.reg);
    return 0;
}

Solving Approach

  • Read inputs: enable, mode, interrupt.
  • Create a ControlRegister union variable.
  • Set all bits to 0 first.
  • Assign:
    • enable → bit 0
    • mode → bits 1–2
    • interrupt → bit 3
  • Print the final reg value (the 8-bit register).

 

 

Upvote
Downvote
Loading...

Input

1 2 1

Expected Output

13