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