19. Extract a Bit Field from a 32-bit Register

Back To All Submissions
Previous Submission
Next Submission

Code

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

uint32_t extract_field(uint32_t reg, uint8_t pos, uint8_t len){

    // uint32_t mask =0;
    // int i=pos, j=0;
    // while(j<len){
    //     mask|=(1<<i);
    //     i++;j++;
    // }

    // return ((reg & mask)>>pos);

    //ORR

     if (len>= 32)// for safety
        return reg >> pos;
    return (reg>>pos) & ((1U<<len)-1);// when len == 32, 1<<len,is dangerous when len == 32 because shifting a 32-bit integer by 32 is undefined behavior.
}

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

 

 

 

Was this helpful?
Upvote
Downvote