Extract a Bit Field from a 32-bit Register

Code

#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", &reg, &pos, &len);
    printf("%u\n", extractField(reg, pos, len));
    return 0;
} 

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

3060793344 28 4

Expected Output

11