状态压缩(位运算)
位运算优先级:
~
<< >>
&
^
|
常用运算:
置位(set bit)将第bit位置为1
A |= 1<<bit
清位(clear bit)将第bit位置为0
A &= ~(1<<bit)
测位(test bit)判断第bit位是否为1
(A&1<<bit)!=0
(A>>bit&1)!=0
取最后一个非0位
A&-A 原理是:A=0000 0100 -A是将A按位取反然后+1,那么就相当于以最后一个1为分界线,左边全部取反,分界线及其往右是不变的
A&((~A)+1)
统计非0位
for(;A;A-=A&-A) ++cnt;
集合取并
A|B
集合取交
A&B
集合相减
A&~B