1.取出x的第i位:
int main()
{
y = (x>>(i-1))&1;
return 0;
}
2.将x第i位取反:
int main()
{
x ^= (1<<(i-1));
return 0;
}
3.将x第i位变为1:
int main()
{
x |= (1<<(i-1));
return 0;
}
4.将x第i位变为0:
int main()
{
x &= (~(1<<(i-1)));
return 0;
}
5.将x最靠右的1去掉:
int main()
{
x = x&(x-1);
return 0;
}
6.取出x最靠右的1:
int main()
{
y = x&(-x);
return 0;
}
7.判断是否有两个连续的一:
int main()
{
if(x&(x<<1)) cout<<"YES";
return 0;
}
8.枚举子集:
int main()
{
for( int x = sta ; x ; x = ( ( x - 1 )&sta) )
cout<<x;
return 0;
}