位运算-简单理解n&(n-1)操作

博客内容更新至lc题解:【位运算】简单理解n & (n - 1)操作

来源于一道简单面试题:LeetCode-剑指offer-15-二进制中1的个数

n

随便一个n:

剑指offer-15-二进制中1的个数01

n - 1

那么n - 1会发生什么:

对于上面随便给的一个n,减去1,但是低2位都是0,减1必然需要借位,那何时结束呢?答案就是遇到1的时候。如果第一步骤中给的n末尾为1,那么就直接在低位就结束了,也符合遇到1就停止的规则

总结而言,n - 1操作:

1.无论是借位,还是减1,遇到1就停止

2.从低位到高位,一直到1,每一位都发生了反转

剑指offer-15-二进制中1的个数02

n & (n - 1)

通过前两步的简单解释,不难理解最后的&操作,就将之前发生过反转的位都变成啦,之后就循环 n - 1, n & (n - 1)操作就可以很很简单的计算出二进制位中1的个数。每一次操作,都是遇到1就结束,所以每一次操作都对应有一个1.直到n的所有位都变成了0,说明计算结束。

剑指offer-15-二进制中1的个数05

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YuanbaoQiang

你的鼓励将是我创作的最大动力~

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值