#include <stdio.h>
#include <stdint.h>
uint32_t sum_one(uint32_t reg)
{
// sum 1 logic: first bit 0 flip to 1
// all bits 1 in right handside of first bit 0 flip to 0
uint32_t m = 1U;
while((reg & m))
{
// flip bits 1 to 0
reg = reg ^ m;
m = m << 1U;
}
reg = reg ^ m; // flip first bit 0 to 1
return reg;
}
uint32_t update_register(uint32_t reg) {
// Your logic here
uint32_t field = 0U;
field = (field | (reg >> 10U)) & 0x001F;
if (field != 31U)
{
field = sum_one(field);
}
// clear field first
reg = (reg & ~(0x001F << 10U));
// update value
reg = (reg | (field << 10U));
return reg;
}
int main() {
uint32_t reg;
scanf("%u", ®);
uint32_t updated = update_register(reg);
printf("%u", updated);
return 0;
}