Extract a Bit Field from a 32-bit Register

Code

#include <stdio.h>
#include <stdint.h>

uint32_t extract_field(uint32_t reg, uint8_t pos, uint8_t len) {
     // Your code her
    uint32_t mask = (1 <<len)-1;
    return (reg >>pos)& mask;
}

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

uint32_t extract_field(uint32_t reg, uint8_t pos, uint8_t len) { // Your code her uint32_t a = 0; for (int i = 0 ; i <= len-1 ; i++) { a |= (1<<i); } reg = reg >>pos; reg = reg & a; return reg; } Also works but O(n).

for mask : len =5 

1 << 5  = 100000
- 1     = 011111  → 0x1F

 

 

Upvote
Downvote
Loading...

Input

3060793344 28 4

Expected Output

11