位运算
求某个整数
算法:
- 先把第
位移到最后一位: n >> k
- 看个位是几:
x & 1
,按位与操作
综上就是:(n >> k) & 1
。
这样可以求出某个数的二进制表示,例如:
cpp
{
int n = 10;
for (int k = 3; k >= 0; k --) {
cout << (n >> k) & 1;
}
return 0;
}
另一个操作 lowbit
,它是树状数组的一个基本操作:返回 x
的最后一位 1 以及后面的 0,例如 lowbit(101000) = 1000
。
直接给出结论:lowbit(x) = x & -x;
考虑 -x
的补码表示,就是 x
的取反加一,因此 101000
的取反加一就是 011000
,注意到最后一位 1 以及后面的 0 经过取反加一没有变化,而前面的则互相相反,因此该算法是正确的。