与操作:
1、指定位清零: a &= ~(1<<i);
2、获取指定位的值: a&(1<<i);
3、保留某些位不变: a = a&0xFF;
4、判断一个数是否是2的幂:return (a&(a-1) == 0 && a != 0);
5、奇偶判断:bool isOdd(int a)
{
return (a&1 == 1);
}
或操作:
1、设置指定位: a | = (1<<i);
取反操作:
1、相反数:int oppsite(int a)
{
return ~a+1;
}
异或操作:
1、交换两个数:void swap(int& a, int& b){
a = a^b;
b = a^b;
a = a^b;
}
2、指定位取反: a ^=(1<<i);
移位操作:
1、2的幂次: a <<=2;
2、循环移位: void rol(int& a,int k){
a= a<<k | a>>32-k;
}
简单应用:
集合中的位运算