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的个数-创新互联
URL分享:http://pwwzsj.com/article/ddgjog.html