求二进制中1的个数

#include<stdio.h>
#include<stdlib.h>
//方法一:
int Numberof1(int n)
{
	int count = 0;
	while(n)
	{
		if(n & 1)
			count++;
		n = n >> 1; //位操作比乘除运算效率高。
	}
	return count;
}
//上面的程序如果传入的n是一个负数,将造成死循环。因为负数移位时要保留符号位。


//方法二:
int _Numberof1(int n)
{
	int flag = 1;
	int count = 0;
	while(flag)   //循环的次数与n的位数有关,时间复杂度高
	{
		if(n & flag)
			count++;
		flag = flag<<1;
	}
	return count;
}

//方法三:
int __Numberof1(int n)
{
	int count = 0;
	while(n)  //有多少个1循环多少次,比较高效
	{
		count++;
		n = n & (n-1);
	}
	return count;
}
int main()
{
	int sum = 20;
	int num1 = Numberof1(sum);
	int num2 =_Numberof1(sum);
	int num3 =__Numberof1(sum);

	printf("%d,%d,%d\n",num1,num2,num3);
	system("pause");
	return 0;
}

总结:

创新互联公司为您提适合企业的网站设计 让您的网站在搜索引擎具有高度排名,让您的网站具备超强的网络竞争力!结合企业自身,进行网站设计及把握,最后结合企业文化和具体宗旨等,才能创作出一份性化解决方案。从网站策划到网站建设、成都做网站, 我们的网页设计师为您提供的解决方案。

一般进行二进制操作时,都可以采用先-1,再按位与的方法。-1相当于从最右边的1到最低位,全都按位取反,再与的话,就把最右边的1置为0.

网页名称:求二进制中1的个数
分享链接:https://www.cdcxhl.com/article14/pgjdde.html

成都网站建设公司_创新互联,为您提供品牌网站制作外贸网站建设虚拟主机营销型网站建设网站改版自适应网站

广告

声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联

网站优化排名