主题思想 :求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&(x
xor(x-1))