#include <stdio.h>
#include <stdint.h>
uint32_t set_bits(uint32_t reg, uint8_t pos, uint8_t len) {
// Your code here
uint32_t mask = 0;
for (int i = 0; i < len; i ++){
mask |= (1<<i);
}
reg |= (mask<<pos);
return reg;
}
int main() {
uint32_t reg;
uint8_t pos, len;
scanf("%u %hhu %hhu", ®, &pos, &len);
printf("%u", set_bits(reg, pos, len));
return 0;
}We want to set a range of bits while leaving all others untouched.
Step 1, we need to create a mask of the length of bits (range), we can create the mask by OR-ing and left shifting the value 1.
Once we have our mask we bit shift to the position and OR the register to set the bits and leave the rest untouched.
Input
0 4 3
Expected Output
112