Set Specific Bits in a 32-bit Register

Code

#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", &reg, &pos, &len);
    printf("%u", set_bits(reg, pos, len));
    return 0;
}

Solving Approach

  1. We want to set a range of bits while leaving all others untouched.

  2. 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.

  3. Once we have our mask we bit shift to the position and OR the register to set the bits and leave the rest untouched.

 

 

Upvote
Downvote
Loading...

Input

0 4 3

Expected Output

112