21. Replace Bit Field in a 32-bit Register

Back To All Submissions
Previous Submission
Next Submission

Code

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

uint32_t replace_field(uint32_t reg, uint32_t val, uint8_t pos, uint8_t len) {
    uint32_t i = pos;
    val = val << pos;
    while(len!=0)
    {
        reg = reg &~(1<<i);
        i++;
        len--;
    }
    reg = reg | val;
    return reg;
   
}

int main() {
    uint32_t reg, val;
    uint8_t pos, len;
    scanf("%u %u %hhu %hhu", &reg, &val, &pos, &len);
    printf("%u", replace_field(reg, val, pos, len));
    return 0;
}

Solving Approach

move the value to the position wheer we want to replace
make the same position in the register to zeros

then just do the OR operation

 

 

Was this helpful?
Upvote
Downvote