All submissions

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 here
    int i,j,sum,res,base=1,res1,q;
    for(i=0;i<32;i++){
        if(i==pos){
         for(j=i,i=0,sum=0;i<len;j++,i++){
            if(reg>>j&1){
              sum=sum*10+1;
            }
            else{
                sum=sum*10;
            }
         }
        break;
        }
    }
    //printf("sum=%d..\n",sum);
    for(res=0;sum;sum=sum/10){
        res=res*10+sum%10;
    }
    //printf("res=%d\n",res);
    res1=0;
    while(res){
        q=res%10;
        res1=res1+q*base;
        base=base*2;
        res=res/10;
    }
    return res1;
}

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

 

 

 

Loading...

Input

3060793344 28 4

Expected Output

11