方法很多啊,比如:
//1.靠循环:
int calculate(unsigned int n){
int count = 0;
unsigned int mark = 0x1;
for(int i = 0; i < 32; i++){
if(n&mark){
count++;
mark<<1;
}
}
return count;
}
//2. 据说不用循环就能算出来的牛叉方法。木有测试。
int f(int a) {
a = ((a & 0xAAAAAAAA) >> 1) + (a & 0x55555555);
a = ((a & 0xCCCCCCCC) >> 2) + (a & 0x33333333);
a = ((a & 0xF0F0F0F0) >> 4) + (a & 0x0F0F0F0F);
a = ((a & 0xFF00FF00) >> 8) + (a & 0x00FF00FF);
a = (a >> 16) + (a & 0xFFFF);
return a;
}
//3. 传说是编程之美上面的牛叉方法
int func(int x){
int count = 0;
while(x){
count++;
x = x & (x - 1);
}
return x;
}
and so on...
无聊人士众多,所以新方法永远都存在,静候佳音。