温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

用一个函数返回参数二进制中1的个数

发布时间:2020-06-15 10:43:13 来源:网络 阅读:371 作者:迎着风奔跑 栏目:编程语言
//题目:写一个函数返回参数二进制中的1的个数
//      比如:15    0000 1111  4个1
//     程序原型:  int count_one_bit(unsigned int value)
//                { 
//                        //返回1的个数
//                 }
   
#include<stdio.h>
#include<stdlib.h>
int count_one_bit(unsigned int value)
{
    int count = 0;
    int n;
    while(n)
	{
	      if(n%2==1)
		count++;
		n = n/2;
	}
	return count;
}

int main()
{
int n = 0;
int ret = 0;
scanf("%d",&n);
ret = count_one_bit(n);
printf("%d\n",ret);
system("pause");
return 0;
}

运行结果:

用一个函数返回参数二进制中1的个数



上面是第一种实现方法,用模2、除2的方法将数字进一步的统计二进制1的个数


除此之外还可以用通过for循环来使数字在计算器中移位比特位的方法,如下:

//00000000 00000000 00000000 00001111
//00000000 00000000 00000000 00000001
//00000000 00000000 00000000 00000111
//数字进入循环后右移0位,与1后为1,统计一个1,i加1,一步一步循环统计
for(i=0; i<32; i++)
{
    if(((n>>i)&1)==1)  
        count++;
}


这道题我们让n和比它小1的数字相与,举一些例子我们就不难发现,每次相与之后的数字的二进制就比n的二进制数字少一个1,并且每次都是少最右边的那个1,因此我们还可以用这个方法来统计参数二进制1的个数:

while(n)
{
    count++;   //当参数能够进入while循环时,说明条件为真,它当中至少有一个1,所以先统计,
              //否则统计结果会少一个1
    n = n&(n-1);
}


到这儿,可能细心的人会发现,如果以上程序输入-1时,程序是无法执行的,因为我们给出的原型中是无符号整型,变量的最小范围是0到65535,而整型的变量的最小范围为-32767到32767,要想正确统计-1的二进制1,只要将函数形参改成  int n 就可以了(只适用上面与或者移位运算的模块程序)

用一个函数返回参数二进制中1的个数



如有补充,尽情评论指教

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI