看了线段树的代码的时候看到这个,一开始以为是逻辑判断,但是解释不通,就搜了下,发现是按位与运算。。。
Lowbit(x)是一个求该表达式的函数
int Lowbit(x)
{return x&(-x);
}
总结一下就是:取出x的最低位1
就是把k的二进制的高位1全部清空,只留下最低位的1
求2^p。(p 为 x 的二进制表示数中, 右向左数第一个1的位置,从第0个位置开始数),如6的二进制表示为110,向左数第零个为0,第一个为1,则p=1,故Lowbit(6) = 2^1 = 2。20同理,二进制数为10100,Lowbit(20)=2^2=4。