0001 int countOnes1 ( unsigned int n ) { //统计整数二进制展开中数位1的总数:O(ones)正比于数位1的总数 0002 int ones = 0; //计数器复位 0003 while ( 0 < n ) { //在n缩减至0之前,反复地 0004 ones++; //计数(至少有一位为1) 0005 n &= n - 1; //清除当前最靠右的1 0006 } 0007 return ones; //返回计数 0008 } //等效于glibc的内置函数int __builtin_popcount (unsigned int n)