Register Bitfields Using Struct Overlay

Code

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

typedef union{
    struct {
        /* data */
        uint8_t enable : 1;
        uint8_t mode : 2;
        uint8_t interrupt : 1;
        uint8_t reserved : 4;
    }fields;
    uint8_t reg;
} Register;

void printf_output(uint8_t enable, uint8_t mode, uint8_t interrupt){
    Register r;
    r.fields.enable = enable;
    r.fields.mode = mode;
    r.fields.interrupt = interrupt;

    printf("%d", r.reg);
}

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

    // Construct and print register value
    printf_output(e,m,i);
    return 0;
}

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

1 2 1

Expected Output

13