首页 > 系统相关 >编写代码实现:求一个整数存储在内存中的二进制中1的个数

编写代码实现:求一个整数存储在内存中的二进制中1的个数

时间:2023-01-26 16:31:12浏览次数:48  
标签:count 二进制 个数 int num 内存 printf main

目的:统计num的补码中有几个1

法一

#include<stdio.h>
int main()
{
int num=0;
int count=0;
scanf("%d",&num);//3--011
//二进制:模2除2
while(num)//因为二进制只有0和1,当num不等于0的时候我们就对它的二进制位是否有1进行计数 0不需要我们计数就不进入循环
{
if(num%2==1)
count++;
num=num/2;
}
printf("%d\n",count);//2
return 0;
}

编写代码实现:求一个整数存储在内存中的二进制中1的个数_补码

但是这种算法对负数的无法解决

优化

法二

从bit为进行思考 按位与

 3 :00000000000000000000000000000011
1 :00000000000000000000000000000001
1&3:00000000000000000000000000000001

发现:当一个数和1与了之后 如果得到的这个数等于1则可以计算得到一个二进制数的1  如果右移则会进入下一个循环的开始 

#include<stdio.h>
int main()
{
int num=0;
int count=0;
int i=0;
scanf("%d",&num);
for(i=0;i<32;i++)
{
if(1==((num>>i)&1))
count++;
}
printf("%d",count);
return 0;
}

编写代码实现:求一个整数存储在内存中的二进制中1的个数_补码_02

法三

#include<stdio.h>
int main()
{
int num=-1;
int i=0;
int count=0;
while(num)
{
count++;
num=num&(num-1);
}
printf("%d",count);
return 0;
}

标签:count,二进制,个数,int,num,内存,printf,main
From: https://blog.51cto.com/u_15899086/6023590

相关文章