#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;
} Input
3060793344 28 4
Expected Output
11