#include <stdio.h>
#include <stdint.h>
// Complete the function
uint16_t highest_set_bit(uint16_t reg) {
// Step 1: Agar number 0 hai to koi bit set nahi hai
if (reg == 0)
return 0;
// Step 2: Loop tab tak chalega jab tak 1 se zyada bits set hain
// Example: reg = 44 -> 00101100
while (reg & (reg - 1)) {
// reg - 1 karne se lowest set bit ke baad wale bits flip ho jate hain
// Example:
// reg = 00101100 (44)
// reg-1 = 00101011 (43)
// AND karne se lowest set bit remove ho jata hai
// 00101100
// 00101011
// --------
// 00101000 (40)
reg &= (reg - 1);
// Next iteration:
// reg = 00101000 (40)
// reg-1 = 00100111 (39)
// 00101000
// 00100111
// --------
// 00100000 (32)
// Ab sirf highest set bit bachi hai
}
// Step 3: Loop rukne ke baad reg me sirf highest bit bachi hoti hai
// Example final: 00100000 (32)
return reg;
return reg; // only highest set bit left
}
int main() {
uint16_t reg;
scanf("%hu", ®);
uint16_t result = highest_set_bit(reg);
printf("%hu", result);
return 0;
}
Input
44
Expected Output
32