0001 int countOnes ( unsigned int n ) { //统计整数二进制展开中数位1的总数:O(logn) 0002 int ones = 0; //计数器复位 0003 while ( 0 < n ) { //在n缩减至0之前,反复地 0004 ones += ( 1 & n ); //检查最低位,若为1则计数 0005 n >>= 1; //右移一位 0006 } 0007 return ones; //返回计数 0008 } //等效于glibc的内置函数int __builtin_popcount (unsigned int n)