#include <stdio.h> #include <stdint.h> uint32_t extractField(uint32_t reg, int pos, int len){ uint32_t mask = 0x0; for(int i = 0; i < len; i++){ mask |= (1 << (pos + i)); } return (reg & mask) >> pos; // de dua ve dang so 4 bit // vd: reg = 0b1011 0110 0111 0000 0000 0000 0000 0000, pos = 28, len = 4 // mask = 0xF0000000 // reg & mask = 0b1011 0000 0000 0000 0000 0000 0000 0000 // (reg & mask) >> pos = 0b0000 0000 0000 0000 0000 0000 0000 1011 = 0xB } int main() { uint32_t reg; int pos, len; scanf("%u %d %d", ®, &pos, &len); printf("%u\n", extractField(reg, pos, len)); return 0; }
Test Cases
Test Results
Input
3060793344 28 4
Expected Output
11