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
    if (pos + len >= 32) {
        return reg >> pos;
    };
    uint32_t bitmask = (1 << len) - 1;
    bitmask = bitmask << pos;
    return (reg & bitmask) >> pos;
}

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

First check if bits will overflow the 32-bit reg, if so return whatever is from the position, Otherwise, set the bitmask accordingly and do bit shifting to get the exact bits in the window.

 

 

Was this helpful?
Upvote
Downvote