lowbit理解

我们在树状数组中可以遇到lowbit这个函数,他的用处是找最低位1的,一般写成(x & -x)形式。

原理

我们知道在计算机中二进制是以补码存储的。
对于x(x>0),我们知道他的补码就是他的本身,但-x怎么求呢
对于整数x, [ x ] = 2 n + 1 x [x]_补=2^{n+1} - |x| [x]=2n+1x,n为x的二进制最高位
x = 26 , [ x ] = 011010 ( B ) x=26,[x]_补=011010(B) x=26,[x]=011010(B)
x = 26 , [ x ] = 2 5 26 = 100000 011010 = 100110 ( B ) -x=-26,[-x]_补=2^{5}-26=100000 - 011010 = 100110(B) x=26,[x]=2526=100000011010=100110(B),最高位为符号位
我们可以发现 [ x ] [-x]_补 [x] [ x ] [x]_补 [x]连同符号位取反加一之后的结果
由上知 [ x ] & [ x ] = 10 ( B ) [x]_补 \& [-x]_补 = 10(B) [x]&[x]=10(B),发现结果恰好就是最低位1

全部评论

相关推荐

不愿透露姓名的神秘牛友
07-03 17:37
点赞 评论 收藏
分享
LemontreeN:有的兄弟有的我今天一天面了五场,4个二面一个hr面
投递字节跳动等公司9个岗位
点赞 评论 收藏
分享
牛客刘北:如果暑期实习是27届的话,你要晚一年才会毕业,企业为什么会等你呢?要搞清时间逻辑呀!27届现在实习只能是在暑假实习,这是日常实习,不是暑期实习。所以多去投日常实习吧,暑期实习肯定不会要你的
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务