2的k次方 :
1<<k
c++符合,java符合
都可以用变量和常数
取变量i二进制的第k位(位数从右向左从0开始)
(i>>k)&1 //k=0的时候就是最低位
整数除以2
java 和 c++ 不用加括号,因为移位运算符的优先级很低
lowbit(x)
lowbit(x)=x&-x=2^k;
//(k是x末尾连续0的个数,例如4末尾两个0,lowbit(4)=2^2=4)
//也可以理解为x的最后一位1的权重
x& (x-1)
可以将x中的最后一位1移除
eg: 6&5=4