搜尋此網誌

2025年11月9日 星期日

找右邊算來第一個1的bit位置

 #include <stdio.h>


int calculate_first_one_in_left(unsigned int n)

{

    int start = 0, shift_r_num = 0;

    while(1)

    {

        if (n == 0) {

            shift_r_num = (start == 0) ? -1 : (shift_r_num - 1) ;

            break;

        }

        start = 1;

        n >>= 1;

        shift_r_num ++;

    }

    return shift_r_num;

}


int main()

{

    unsigned int n=0x1100;

    printf ("n=0x%x, %d\n", n, calculate_first_one_in_left(n));

    n=0x100;

    printf ("n=0x%x, %d\n", n, calculate_first_one_in_left(n));

    n=0x10;

    printf ("n=0x%x, %d\n", n, calculate_first_one_in_left(n));

    n=0x1;

    printf ("n=0x%x, %d\n", n, calculate_first_one_in_left(n));

    return 0;

}

[Output]

n=0x1100, 12

n=0x100, 8

n=0x10, 4

n=0x1, 0

沒有留言:

張貼留言