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

全部评论

相关推荐

点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务