转自http://my.oschina.net/ithaibo/blog/142655
题目:
输入一个整数,输出该数二进制表示中1的个数。其中负数用补码表示。
题目引自http://ac.jobdu.com/problem.php?cid=1046&pid=0。
算法分析:
第一眼看见题目的时候,最初的想法是对输入的整数对2取余,如果其结果为1就统计。但是这种做法会造成负数的统计不准确。
第二种方案,利用C语言的位运算,对整数的二进制中出现的1的个数进行统计。其统计的方法就是整数与数字“1”进行与运算(&)。低位到高位循环,与运算,左进一位。
算法实现:
int Count(int i) {
int count = 0;
unsigned int flag = 1;
while(flag){
if(i & flag)
count ++;
flag = flag << 1;
}
return count; }