hdu 1196 lowest bit

本文详细解析了求lowestbit的算法实现,通过分析一个数的二进制表示中从右向左数第一个1的位置,利用位运算技巧快速计算出该位置对应的数值。此算法在树状数组等数据结构中有广泛应用。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

主题思想 :求lowestbit ,这是树桩数组里面的基础函数。
思路就是求一个数的二进制表示中,从右向左数,从0开始计数,第一次遇到1时,1所处第k位, 2^k的值。
或者说,从右向左数,遇到1为止,0的个数为k,2^k
或者说,从右往左数,遇到1为止,截断 这个二进制字符串所表示的整数。
比如 6 二进制为 110。 那么k为 1, 2^1 =2
或者10这个二进制字符串所表示的整数, 2

从字符串角度来考虑。
88=1011000,如何可以让
1011000 变成
0001000
首先一个数x, 另x-1, 则x的二进制表示中1及1以后的位都与x-1相反
xxor(x-1) 则,1前面的都为0 ,1,及1 后面的都为1
此时 x&(xxor(x-1)) 则,1前面都为0,1,为1,1后面全都为0
而 -x = x(xor) (x-1);

所以x&(-x) ==x&(xxor(x-1))

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值