求一个数存储在内存中二进制中1的个数。

*内存中存放的位补码即计算补码中的1的个数

1.使用%和/

177%10=7--->得到十进制的最低位

177/10=17---->丢掉的最低位

同理

177%2----->得到二进制的最低位

177/2-------->丢掉的最低位

 

2.使用移位与按位操作符 

&----按位与-->有0为0,两个都为1才是1

先使用右移操作符使a的二进制位向右移动i位,随着i的增加右移的位数逐渐增加即最低位随之改变。

再使用按位与操作符,与1按位与,1的二进制位只有最低位才有1 。a&1只有a的二进制最低位是1才能返回1(&两个都为1才是1)。返回判断是否等于1,如果等于则count加1.

3.只使用按位与操作符

 

 通过a&(a-1)消除最右边的1,直至1变成0结束while循环。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值