题目:
实现一个函数,输入一个整数,输出该数二进制表示中1的个数。如9的二进制是1001,因此输入9输出2。
解法一:可能死循环
int num1(int n) { int count =0; while(n) { if(n&1) count++; n=n>>1; } return count; }
上面的函数如果输入一个负数,如果一直做右一运算,最终这个数字就会变成0xFFFFFFFF而陷入死循环。
解法二:无死循环但效率低
int num1(int n) { int count =0; unsigned int flag=1; while(flag) { if(n&flag) count++; flag=flag<<1; } return count; }
解法三:有几个1只需要循环几次
int num1(int n) { int count =0; while(n) { ++count; n=(n-1)&n; } return count; }
原文:http://blog.csdn.net/wtyvhreal/article/details/45244405