计算整型数在二进制编码中1的个数

分析

二进制的计数规律

1.​​我们都知道二进制计数中从左到右第一位是2的0次方,第二位是2的1次方,以此类推。
2.当n位次上存放1时,该位数表示的是2^n(二的n次方)
3.且下一位的数会比前面所有位的数加起来都要大。
请添加图片描述

提出假设

1.先利用for循环找出比所求的数(记作a)刚好大一个二进制位的数(记作2^n)—(根据分析3)
2. 2^(n-1)就是最大位次的1
3. 再用所求数a减去 2^(n-1),就可以得到剩下的数
4. 依次往复,就可以得到1的个数了

实践

初次代码是长这样的:
请添加图片描述
发现问题1:请添加图片描述
再运行一次请添加图片描述
重新打for循环的代码进行调试
请添加图片描述
一步步精简请添加图片描述
请添加图片描述

然后和最开始的代码进行对比请添加图片描述
终于得到梦中情码:(欢呼!)请添加图片描述
总结错点:
1.暂时存放量b要放在输入值scanf后面,不然b被赋予的就是初始值0.
2.for循环语句的语句2里放的是可以运行的条件,不是跳出循环的条件

结尾

代码出错不可怕,找到错误,分析错误,解决它,精简代码顶呱呱。

关注我,让我们一起成长吧!

  • 3
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值