#include <stdio.h>
#include <stdint.h>
uint32_t update_register(uint32_t reg) {
// Your logic here
//printf("Original reg %b\n",reg);
//printf("Reg after shift %b\n",(reg>>10));
//1. Extract a 5 bit field from 10-14
//1.1 Shift reg so bit 10-14 is at start, then & with mask (1111 1 (0x1F))
uint32_t field_val = (reg >> 10) & 0x1F;
//printf("Extracted field val %d\n",field_val);
//2. Increment field_val if value < 30
if (field_val < 30){
field_val++;
}
//printf("Incremented field val %d\n",field_val);
//3. Rewrite new val into old position
//3.1 Clear bits of old position
reg &= ~(0x1F << 10);
//printf("Reg after bit clear %b\n",reg);
//3.2 Insert new field value into position
reg |= (field_val << 10);
//printf("Reg after new insert %b\n",reg);
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