Keep Only the Highest Set Bit

Code

#include <stdio.h>
#include <stdint.h>

// Complete the function
uint16_t highest_set_bit(uint16_t reg) {
    // Your logic here
    uint16_t ret_val = reg;
    while((reg & (reg-1)) != 0 ){
        reg = reg & (reg-1);
        ret_val = reg;
    }
    return ret_val;
    /*
    //check for zero
    
    ret_val = 1U << 15;
    if(reg == 0)    return 0;
    while(!(reg & ret_val)){
        ret_val >>= 1;
    }
    return ret_val;
    */
}

int main() {
    uint16_t reg;
    scanf("%hu", &reg);

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

Solving Approach

 

refer previous problem, isolate the leftmost bit by using bitwise anding operation or by checking each value until bitwise result is 0.

 

Upvote
Downvote
Loading...

Input

44

Expected Output

32