如何取出一個數的第一個非零比特位?

取出一個數的第一個非零比特位,最簡單的想法就是通過右移與1,記錄右移次數,然後將1左移回去。

int first_bit(int n)
{
    int count = 0;//計數器
    while(n^1)//第一位爲零
    {
        n >>=1;
        count++;
    }
    rerutn (1<<count);
}

但是,看看這個

//int n != 0;
f_bit = n & ((n - 1)^-1);
f_bit = n & (~(n - 1))

一步一步看看

  • 0011 0110 | 設n
  • 0011 0101 | n - 1 把n的第一位置零
  • 1111 1111 | - 1
  • 1100 1010 | ^ -1 按位取反,將n的第一個非零比特位保留,其他位取反
  • 0000 0010 | & n 除了第一個比特位,其他位都是相反的,相與得到第一個比特位
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章