#鹏哥C语言#
1.方法一:
代码展示:
#include<stdio.h>
//int count_(int n)
//如果用int类型接受num的值,这个函数便不能计算负整数在二进制下位数为一的个个数,所以必须要用unsigned int接受
int count_(unsigned int n)
{
int count =0;
while(n!=0)
{
if((n%2)==1)
{
count++;
}
n/=2;
}
return count;
}
int main()
{
int num=0;
scanf("%d",&num);
int n= count_(num);
printf("%d\n",n);
return 0;
}
运行结果展示:
2.方法二:
代码展示:
#include<stdio.h>
int count_(int n)
{
int i=0;
int count =0;
for(i=0;i<32;i++)
{
if(((n>>i)&1)==1)
{
count++;
}
}
return count;
}
int main()
{
int num=0;
scanf("%d",&num);
int n= count_(num);
printf("%d\n",n);
return 0;
}
运行结果展示:
3.方法三:
代码展示:
#include<stdio.h>
int count_(int n)
{
int count =0;
while(n)
{
n=n&(n-1);
count++;
}
return count;
}
int main()
{
int num=0;
scanf("%d",&num);
int n= count_(num);
printf("%d\n",n);
return 0;
}
运行结果展示:
方法三拓展 :如何判断一个数是不是2的n次方?
代码展示:
#include<stdio.h>
int main()
{
int n=0;
scanf("%d",&n);
if((n&(n-1))==0)
printf("%d是2的n次方",n);
else
printf("%d不是2的n次方",n);
return 0;
}
运行结果展示: