與操作:
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;
}
簡單應用:
集合中的位運算