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