蒟蒻写来记录一下,大佬要是有建议或者更好的方法,欢迎评论哈
第一种方法,使用lowbit函数
#include<iostream>
using namespace std;
int lowbit(int n)//返回二进制数的最后一位1
{
return n&-n;
}
int main()
{
int n;
cin>>n;
int res(0);
while(n)
{
n-=lowbit(n), res++;//每次消掉一个1,直到n为0
}
cout<<res;
return 0;
}
这种方法只适用于正数
第二种方法,使用移位&1
#include<iostream>
using namespace std;
int main()
{
long long n,i(63),res(0);
cin>>n;
for(;i>=0;i--)
{
if(n>>i&1)res++;//把第i位移动到个位,&1判断是否为1
}
cout<<res;
return 0;
}
该方法正负数皆适用