//题目:请编写一个函数,输入一个整数,输出该数二进制中表示1的个数。
//例如,把9表示成二进制1001,有2位是1。
//因此,如果输入9,则该函数输出2。
#include<iostream>
using namespace std;
int bitcount(unsigned int n)
{
int count=0;
while(n)
{
count++;
n&=(n-1);//会自动转换为二进制
}
//n-1是什么意思类
//如果n为 1001 0100
//每一位其实相当于2,当第一位为0,第二位为1,第一位借位相当于借了2,
//呢2-1=1,所以第一个1,后面所有的0都会随之变为1
//n-1为1001 0011
//"&"这个符号如果不是这两位数都为1,则将变为0,这样之间就把第一个1去了
//n&(n-1)为1001 0000
//每一次n&=(n-1),就相当于去掉第一个遇到的1
//这样如果1000 0000就只需运算一次,如果使用">>1",要运算8次
return count;
}
int main()
{
int n; scanf("%d",&n);
int N=bitcount(n);
cout<<N;
return 0;
}
精妙的算法——计算二进制中1的个数(小白入!!)
最新推荐文章于 2024-01-24 23:23:37 发布