
x是8字节,先用for统计各字节1的个数,然再折叠式地累加各字节的统计数,
最后取低8位,高56位就不知道是什么鬼了,也不用管
long fun_c(unsigned long x){
long val = 0;
for (int i = 0; i < 8; ++i){
val += x & 0x0101010101010101;
x >>= 1;
}
val += (val >> 32);
val += (val >> 16);
val += (val >> 8);
return val & 0xff;
}




近期评论