Register Bitfields Using Struct Overlay

Code

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

typedef union {
    struct {
        uint8_t enable    : 1;   // bit 0
        uint8_t mode      : 2;   // bits 1-2
        uint8_t interrupt : 1;   // bit 3
        uint8_t reserved  : 4;   // bits 4-7
    } bits;
    uint8_t reg;
} ControlRegister;

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

    ControlRegister ctrl;
    ctrl.reg = 0;  // very important

    ctrl.bits.enable    = e;
    ctrl.bits.mode      = m;
    ctrl.bits.interrupt = i;

    printf("%u", ctrl.reg);

    return 0;
}

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

1 2 1

Expected Output

13