#include <stdio.h>
#include <stdint.h>
#define BIT_SHIFT(n) (1 << n)
// Complete the function
uint16_t highest_set_bit(uint16_t reg) {
if (reg == 0){
return 0;
}
int last_index = 0;
// loop through all, save index where the last 1 was seen before hitting 0
for (int i = 0; i < 16; i++){
if (reg & BIT_SHIFT(i)) {
last_index = i;
reg &= ~(BIT_SHIFT(i));
}
}
// printf("%d \n" , last_index);
reg |= BIT_SHIFT(last_index);
return reg;
}
int main() {
uint16_t reg;
scanf("%hu", ®);
uint16_t result = highest_set_bit(reg);
printf("%hu", result);
return 0;
}
Input
44
Expected Output
32