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) {
//          reg = 1111 1111
//          val = 0
//          pos = 4
//          len = 4
    uint32_t mask;
    mask = (1u << len) - 1; // 0000 1111
    reg = reg & ~(mask << pos); // 0000 1111 << 4 =  ~  1111 0000 = 0000 1111
    // 1111 1111 & 0000 1111 = 0000 1111
    val = val & mask; // 0 & 0000 1111 = 0
    val = (val << pos); // 0 << 4 = 0

    
    return reg | val;         // 0000 1111 | 0 = 0000 1111
                                
}

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

 

 

 

Was this helpful?
Upvote
Downvote