此方法是在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的情況
這個網站提供了很多神奇的演算法
有興趣的人可以上去看看
沒有留言:
張貼留言