#include <stdio.h>
#include <stdint.h>
// Complete the function
uint16_t highest_set_bit(uint16_t reg) {
// Your logic here
uint16_t comp=0;
uint16_t reg_new=0;
for (int i = 0; i <= 17; i++)
{
comp = (1<<i);
if (comp > reg)
{
reg_new |= (1<<(i-1));
return reg_new;
}
else if (reg == 65535)
{
reg_new |= (1<<15);
return reg_new;
}
}
return 0;
}
int main() {
uint16_t reg;
scanf("%hu", ®);
uint16_t result = highest_set_bit(reg);
printf("%hu", result);
return 0;
}
Track when 2**i is greater than reg, when true, last most bit is i-1. Account for when reg is max 16 bit value.
Input
44
Expected Output
32