Keep Only the Highest Set Bit

Code

#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", &reg);

    uint16_t result = highest_set_bit(reg);
    printf("%hu", result);
    return 0;
}

Solving Approach

 

 

 

Upvote
Downvote
Loading...

Input

44

Expected Output

32