2011年11月22日 星期二

一個整數中有多少個bits被set成1(How Many Bits Set)

這個問題有一個很好記的解法
此方法是在C的聖經 The C Programming Language 的一段範例程式
#include <iostream>
using namespace std;

int main() {
    int val;
    unsigned int count = 0;

    cin >> val;

    while (val) {
        val &= (val - 1);  // clear the least significant bit set
        count++;
    }

    cout << count << " bits set" << endl;

    return 0;
}
val &= (val - 1)這行code每做一次就會把最右邊的bit清成0
因此用這個簡單好記的方法就可以算出有多少bit被set
當然,這個方法並不是最快的方法
worst case會出現在所有bit都被set的情況
這個網站提供了很多神奇的演算法
有興趣的人可以上去看看

沒有留言:

張貼留言