这是一个蛮经典的题。
首先我们会想到最简单的方法就是,用什么方法判断这一位是不是1,如果是1就count++,如果不是就向右移一位, 从新循环。
那么,怎么判断这一位是什么呢。其实很简单,我们只需将这个数和1相与(&),就可以拿到这一个。
下面是代码实现:
#include <iostream>
using namespace std;
int count_one_bits(int n)
{
int count=0;
while(n)
{
if(n&1)
count++;
n=n>>1;
}
return count;
}
int main()
{
int ret=0;
ret = count_one_bits(5);
cout<<ret<<endl;
system("pause");
return 0;
}
那么现在问题来了,这个向右移位的操作其实和把整数除以2是相同的,那么可以替换吗?
答案是否定的,应为除法的效率比移位运算符低的多,应该尽量避免使用。