每日一个算法知识点 - lowbit方法

今天来学习一下c++中的lowbit原理,这是一个非常有用的位运算技巧,可以帮助我们快速求出一个数的二进制表示中最低位的1以及它对应的值。

lowbit的定义

对于任意一个整数x,lowbit(x) = x & (-x),其中&表示按位与运算,-x表示x的相反数。为什么这样定义呢?我们可以用一个例子来解释一下。

lowbit的推演:

假设x = 12,那么它的二进制表示是1100,它的相反数-x = -12,它的二进制表示是补码形式,即先取反得到0011,再加1得到0100。然后我们把x和-x按位与起来,得到lowbit(x) = 1100 & 0100 = 0100,这就是x的最低位的1以及它对应的值,也就是4。

那么lowbit有什么用呢?

我们可以利用它来实现一些高效的算法,比如求一个数的二进制表示中有多少个1,或者维护一个数组的前缀和,快速求树状数组的层数 等等

lowbit 也可以快速求出这个二进制数的末尾有几个0, lowbit(x) = 2^{k} ,k 则表示末尾有几个零

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值