All submissions

Extract and Modify Field in a 32-bit Register

Simplified

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

#define EXTRACT_MASK   0x1F
#define EXTRACT_POS    10

#define FIELD_VALUE(x)     ((x>>EXTRACT_POS) & (EXTRACT_MASK))
#define INCREMENT_BIT(x)   ((FIELD_VALUE(x) + 1))
#define EXTRACT_MODIFY(x)  ((FIELD_VALUE(x) < 31) ? INCREMENT_BIT(x) : FIELD_VALUE(x))
uint32_t update_register(uint32_t reg)
{
    // Your logic here
    uint8_t field_val = EXTRACT_MODIFY(reg);
    reg &=~ (EXTRACT_MASK<<EXTRACT_POS);
    reg |= (field_val<<EXTRACT_POS);
    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