题:
求(32)整形中二进制有多少个一:
模拟代码:
#include<bits/stdc++.h>
using namespace std;
int sum,s[33];
int n;;
void slove()
{
int k=32,x;
memset(s,0,sizeof(s));
//printf("%d",s[0]);
int ans=abs(n);
while(ans)
{
x=ans%2;
s[k]=x;
k--;
ans/=2;
}
//int sum=0;
if(n>=0)
{
for(int i=1; i<=32; i++)
{
if(s[i]==1)
sum++;
}
}
else
{
for(int i=1;i<=32;i++)
{
if(s[i]==0)
s[i]=1;
else
s[i]=0;
}
s[32]++;
for(int i=32;i>=1;i--)
{
if(s[i]%2==0&&s[i]!=0)
{
s[i]%=2;
s[i-1]++;
}
}
for(int i=1;i<=32;i++)
{
if(s[i]==1)
sum++;
}
}
}
int main()
{
scanf("%d",&n);
sum=0;
slove();
printf("%d\n",sum);
}
二进制:
#include<bits/stdc++.h>
using namespace std;
int main()
{
int n;
scanf("%d",&n);
int cnt=0;
for(int i=1;i<=32;i++)
{
if(n&(1<<i))
cnt++;
}
printf("%d\n",cnt);
//printf("%lld\n",1<<32);
}