逻辑运算
运算符和优先级
算术(算术移位)>大小关系>位运算>逻辑运算
- ……
- 3级
/
*
%
- 4级
+
-
- 5级
<<左移
>>右移
- 6级 判断大小
- 7级 判等
- 8级至10级
&(按位与)
^(异或)
|(按位或)
- 11级
&&
- 12级
||
- ……
常见操作
以最右位为第0位。
什么呢
x&-x
树状数组中使用
求x的第k位数:
x>>k&1
求第k位数是1的x:
1<<k
bool check(int state)//是否有连续的1
{
for (int i = 0; i < n; i ++ )
if ((state >> i & 1) && (state >> i + 1 & 1))
return false;
return true;
}
int count(int state)//求1的个数(较朴素)
{
int res = 0;
for (int i = 0; i < n; i ++ ) res += state >> i & 1;
return res;
}
遍历状态
遍历k位 遍历第[0,k-1]位 遍历第[0,k)位
for (int i = 0; i < 1 << n; i ++ )
二进制状态的判断合法经验
一起进步! 欢迎各位大佬在下面留言补充
AC1064
合法状态:(a&b)==0 && check(a|b)
AC327
合法状态:(a&b)==0
我学状压DP是学傻了(
我也是hh
第一道题就长见识了