1) 异或 ^ : 每一位上的二进制数相同为0,不同为1 a^a=0 ; a^b^a = b ; a^b^b = a ; a^0=a ;
2) 按位与 & (相当于交集) : 1&1=1 1&0=0 0&1=0 0&0=0
3) 按位或 | (相当于并集) : 1 | 1=1 1 | 0=1 0 | 1=1 0 | 0=0
4) 左移 x<<n : 将二进制数整体向左移n位,相当于 x*(2^n)
5) 右移 x>>n : 将二进制数整体向右移n位,相当于 x/(2^n) 向下取整 如 -3>>1=-2 ( C++中的"/" 是向 0 取整 )
状态压缩中的位运算
0 空集
1<<i { i }
(1<<n)-1 { 0 , 1 , 2 , 4 , ~~~~~~~~ , n-1 }
(S>>i)&1 把S中的第 i 位取出
S | (1<<i) 将S中的第 i 个位置标记为 1
S&(~(1<<i)) 将S中的第 i 个位置标记为 0
若S是U的子集,则S关于U的补集C=S^U