【c语言】  写一个函数返回参数二进制中 1 的个数

    xiaoxiao2025-09-08  593

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

    本文出自 “娜些维度的雪” 博客,请务必保留此出处http://1536262434.blog.51cto.com/10731069/1699689

    转载请注明原文地址: https://ju.6miu.com/read-1302450.html
    最新回复(0)