#include <stdio.h>
#include <stdint.h>
#define EXTRACT_POS 10
#define EXTRACT_SIZE 5
#define EXTARCT_MASK (1 << EXTRACT_SIZE) - 1
static int temp = 0;
uint32_t update_register(uint32_t reg) {
// Your logic here
for(int i=0; i < EXTRACT_SIZE; i++)
{
temp |= (((reg >> (EXTRACT_POS + i)) & 1) << i);
}
(temp < 31)?++temp:temp;
reg &= ~(EXTARCT_MASK << EXTRACT_POS); //clear old reg values
reg |= ((temp & EXTARCT_MASK) << EXTRACT_POS); //update new values
return reg;
}
int main() {
uint32_t reg;
scanf("%u", ®);
uint32_t updated = update_register(reg);
printf("%u", updated);
return 0;
}
Input
15360
Expected Output
16384