求x的第k位数字: x>>k&1
解释: 11010 求第2位(即求那个0)
先>>2 110
再&1 & 001
-----
000
即输出0
lowbit(x)=x&-x(x&~x+1),返回x的最后一位1以及后面的0
解释:假设 x=101010100
~x =010101011
~x+1=010101100
然后 &x 101010100
---------------
000000100
即输出100
#include <iostream>
#include <vector>
#include <algorithm>
using namespace std;
int main()
{
//求x的第k位数字: x>>k&1
int a = 14;
cout << (a >> 2 & 1) << endl; //输出a的第2为数字(二进制)
for (int i=5; i >= 0; i--)
cout << (a >> i & 1); //输出a的二进制组成
cout << endl;
//lowbit(x)=x&-x(x&~x+1),返回x的最后一位1以及后面的0
int b = (a & -a);
int c = (a & ~a + 1);
for (int i = 5; i >= 0; i--)
cout << (b >> i & 1); //输出b的二进制组成
cout << endl;
for (int i = 5; i >= 0; i--)
cout << (c >> i & 1); //输出c的二进制组成
cout << endl;
return 0;
}