#include <stdio.h>
#include <stdint.h>
// Complete the function
uint16_t highest_set_bit(uint16_t reg) {
// Your logic here
// since the datatype is unsigned int 16bit - no signed mention on MSB
// Hence, MSB is 15 and LSB is 0
// lets create a for loop to check the each bit starting from MSB and decrease until the value is 1
// then mask the integer and return that value
uint16_t mask = 0;
for(uint8_t i = 15; i>0; i--)
{
if (reg & (1 << i))
{
return (mask | (1<<i));
}
}
return 0;
}
int main() {
uint16_t reg;
scanf("%hu", ®);
uint16_t result = highest_set_bit(reg);
printf("%hu", result);
return 0;
}
Input
44
Expected Output
32