如何将输入的数转化为二进制,统计其中 1 的个数。
1.将十进制转换为二进制是将数字不断除2取余,在这里我将余数为1的情况进行累加,可以得出结果。
#include<stdio.h>
int main()
{
int num;
int s=0,yus=0,count=0;//s为商,yus为余数
printf("请输入一个数字:>");
scanf("%d",&num);
for(s=num;s>=1;)
{
yus=s%2;
s=s/2;
if (yus==1)
{
count++;
}
}
printf("%d\n",count);
return 0;
}
2.上述程序未考虑数字为负数的情况。要考虑负数,所以我引入了按位与&(数字在二进制情况下对应位进行与运算,同为1时输出1)和右移>>(数字每右移一次左边按符号位的情况进行补位,右移相当于数字除以2)。第i次,当数字和1进行与运算结果为1时,它的二进制的第i为为1,将1的情况累加,得出结果。
#include<stdio.h>
int main()
{
int num;
int count=0,i=32;
printf("请输入一个数字:>");
scanf("%d",&num);
while(i--)
{
if (num&1==1)//按位与&,同为1时出1
{
count++;
}
num=num>>1;//右移1位,相当于num/2
}
printf("输出数字在二进制中 1 的个数:") ;
printf("%d\n",count);
return 0;
}
3.为了更进一步的完善程序,只用了与运算。其中关键的表达式为 num&(num-1); 以12为例结果是2.
//输入12
// 0000 0000 0000 1100 (12)
//& 0000 0000 0000 1011 (11)
// 0000 0000 0000 1000 (8)------1
//& 0000 0000 0000 0111 (7)
// 0000 0000 0000 0000 (0)------2
#include<stdio.h>
int main()
{ int num;
int count=0;
printf("请输入一个数字:>");
scanf("%d",&num);
while(num)
{
count++;
num=num&(num-1);//按位与&,同为1时出1
}
printf("输出数字在二进制中 1 的个数:") ;
printf("%d\n",count);
return 0;
}
转载于:https://blog.51cto.com/1536262434/1699689