#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", ®, &pos, &len); printf("%u", extract_field(reg, pos, len)); return 0; }
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
Test Cases
Test Results
Input
3060793344 28 4
Expected Output
11