C语言中求一个数的二进制序列的1的个数-创新互联

在C语言的学习中我们也许会遇到求一个数的二进制序列中1的个数的题目

让客户满意是我们工作的目标,不断超越客户的期望值来自于我们对这个行业的热爱。我们立志把好的技术通过有效、简单的方式提供给客户,将通过不懈努力成为客户在信息化领域值得信任、有价值的长期合作伙伴,公司提供的服务项目有:域名注册、网络空间、营销软件、网站建设、晋城网站维护、网站推广。

下面我们介绍一种相对简易的方法 

int main()
{
	int i = 0;//定义一个i变量,即我们需要求二进制形式中1的个数的数字
	scanf("%d", &i);//输入变量i的值
	int count = 0;//定义一个变量以表示1的个数
	while (i)
	{
		i = i & (i - 1);
		count++;
	}
	printf("%d", count);//输出
    return 0;
}

考虑到&操作符的特性

我们可以选取&操作符来达到我们的目标。

假设i的值为15,则i的二进制序列为 1111
若给i按位与上i-1 即i&(i-1)
此时即是1111-i
 1110-(i-1)
    1110-i&(i-1)
我们发现i最低位的1变成了0
此时我们再进行一遍 1110-i
                     1101-(i-1)
                                1100-i&(i-1)
我们发现i的1又减少了一个
那么以此类推,i每按位与一次(i-1)i的二进制形式中就会减少一个1,而最终i的值会变成0
考虑到while循环的特性(判断条件非0即进入循环),我们就可以写出上述的代码

你是否还在寻找稳定的海外服务器提供商?创新互联www.cdcxhl.cn海外机房具备T级流量清洗系统配攻击溯源,准确流量调度确保服务器高可用性,企业级服务器适合批量采购,新人活动首月15元起,快前往官网查看详情吧

分享标题:C语言中求一个数的二进制序列的1的个数-创新互联
网页网址:https://www.cdcxhl.com/article6/ddgjog.html

成都网站建设公司_创新互联,为您提供自适应网站微信公众号营销型网站建设网站内链网站收录品牌网站设计

广告

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

外贸网站制作