#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", ®, &val, &pos, &len); printf("%u", replace_field(reg, val, pos, len)); return 0; }
move the value to the position wheer we want to replacemake the same position in the register to zeros
then just do the OR operation
Test Cases
Test Results
Input
255 0 4 4
Expected Output
15