2010年5月27日星期四

Bit Counting

// 算法 1) - O(number of bits)
int countBit_1(int x) {

int ret = 0;
while (x) ret += x&1, x >>= 1;
return ret;
}

// 算法 2) - O(number of 1's)
int countBit_2(int x) {

int ret = 0;
while (x) ret++, x -= x&-x;
return ret;
}

// 算法 3) - O(number of 1's)
int countBit_3(int x) {

int ret = 0;
while (x) ret++, x &= x-1;
return ret;
}

不過,根據統計及分析,最簡單的 算法1) 效率最高。