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

来源:互联网 发布:手机管理淘宝店铺 编辑:程序博客网 时间:2024/05/18 02:19

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

0 0