lowbit()

本文深入浅出地介绍了Lowbit操作在算法竞赛和高级数据结构中的重要性,特别是对于线段树的构建。Lowbit(x)表示x的二进制表示中最低位的1所对应的值。通过与运算x & (-x)可以轻松获取这个值。博客详细解释了二进制位运算的原理,并提供了代码示例来帮助读者掌握这一技巧。
摘要由CSDN通过智能技术生成

lowbit()

简介:众所周知,lowbit()操作是算法竞赛中的高级技巧,特别是高级数据结构,线段树的核心,还有什么二进制与位运算题目,而本文就用最通俗易懂的话,来教会大家lowbit的含义。

含义lowbit(x)x的二进制表达式中最低位的1所对应的值。

什么意思了:

十进制 二进制 最低位的1所对应的值对应的二进制数 最低位的1所对应的值对应的十进制数

1 1 1 1

2 10 10 2

3 111 1 1
4 100 100 4

5 101 1 1

6 110 10 2

7 111 1 1

方法:我们得到lowbit的值,只需要得到最后一个1的位置,并且把除了这个位置之外的所有位置全部置成零。然后输出就可以。

先上代码

int lowbit(int x)
{
    return x&(-x);
}

这个代码实在是很简单,就是一个数与它的负数进行与运算。

我们希望获得一个数的最低位的1所对应值,那么就需要将这个数字与自己的补码取与,那么计算机中一个数的补码是啥了,没错就是这个数字的负数(负数就是正数的反码+1),

为啥和补码去与就可以了

(110)2 = 6 原码

(001)2 反码

(010)2 补码

可以发现变为反码后 x 与反码数字位每一位都不同, 所以当反码加1,成为补码的时候,反码会逢1一直进位直到遇到0,且这个0变成了1,然后就寻找到了,第一个不为0的1的位置,而且这个1前面的数字,全部变成了0.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

极客李华

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

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

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

打赏作者

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

抵扣说明:

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

余额充值