#include <stdio.h>
#include <stdint.h>
// Complete the function
uint16_t highest_set_bit(uint16_t reg) {
if (reg == 0) return 0; // Special case: if reg is 0, return 0
// Step 1: Propagate the highest set bit to the right
reg |= reg >> 1; // Spread the highest set bit to the right
reg |= reg >> 2; // Continue spreading
reg |= reg >> 4; // Continue spreading
reg |= reg >> 8; // Continue spreading
// Step 2: Isolate the highest set bit
return (reg + 1) >> 1; // Add 1, then shift right to isolate the highest set bit
}
int main() {
uint16_t reg;
scanf("%hu", ®);
uint16_t result = highest_set_bit(reg);
printf("%hu", result);
return 0;
}
Input
44
Expected Output
32