借助异或和分治的思想:
#include<stdio.h>
int HaiMingWeight(unsigned int n){
n = (n & 0x55555555) + ((n & 0xaaaaaaaa) >> 1);
n = (n & 0x33333333) + ((n & 0xcccccccc) >> 1);
n = (n & 0x0f0f0f0f) + ((n & 0xf0f0f0f0) >> 1);
n = (n & 0x00ff00ff) + ((n & 0xff00ff00) >> 1);
n = (n & 0x0000ffff) + ((n & 0xffff0000) >> 1);
return n;
}
int main(){
unsigned int n = 1;
printf("%d\n",HaiMingWeight(n));
return 0;
}