在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元起,快前往官网查看详情吧