利用位与运算简化代码
题目及代码来源:《数据结构习题解析(第三版)》,邓俊辉编著,ISBN: 978-7-302-33065-3
题目要求:改进教材中的countOnes()算法,使得时间复杂度降至O(countOnes(n)),线性正比于数位1的实际数目
/*教材算法*/
int countOnes(unsigned int n) { //统计整数二进制展开中数位1的总数:O(logn)
int ones = 0; //计数器复位
while (0 < n) { //在n缩减至0之前,反复地
ones += (1 & n); //检查最低位,若为1则计数
n >>=