如何将输入的数转化为二进制,统计其中 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; }