19. Extract a Bit Field from a 32-bit Register

Back To All Submissions
Previous Submission
Next Submission

Code

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

uint32_t extract_field(uint32_t reg, uint8_t pos, uint8_t len) {
    // Your code here
    uint8_t i;
    uint32_t mask=0;
    for (i=pos; i < (pos + len); i++)
    {
        mask = mask | (1 << i);
    }
    reg = (reg & mask) >> pos;
    return reg;
}

int main() {
    uint32_t reg;
    uint8_t pos, len;
    scanf("%u %hhu %hhu", &reg, &pos, &len);
    printf("%u", extract_field(reg, pos, len));
    return 0;
}

Solving Approach

 

create a mask of 1s from the first bit to the last

bitwise AND the mask with the register 

right shift the result to the beginning of the register

 

 

Was this helpful?
Upvote
Downvote