All submissions

Extract and Modify Field in a 32-bit Register

Code

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

typedef union{
    uint32_t Reg;
    struct{
        uint32_t x : 10;
        uint32_t target : 5;
        uint32_t y : 16;
    };
}Field;

uint32_t update_register(uint32_t reg) {
    // Field check;
    // check.Reg = reg; 
    // if(check.target < 31 ){
    //    check.target++;
    // }
    // return check.Reg;

    uint32_t field = (reg >> 10 & (0x1F)); // Extract field

    if (field < 31) {
        field ++; // Increment
    }

    reg &= ~(0x1F << 10); // Clear bits 10–14
    reg |= (field << 10); // Write updated field

    return reg;

}

int main() {
    uint32_t reg;
    scanf("%u", &reg);
    uint32_t updated = update_register(reg);
    printf("%u", updated);
    return 0;
}

Solving Approach

 

 

 

Loading...

Input

15360

Expected Output

16384