位运算trick
补码
正数和0补码为本身,负数补码为取反码后加1
多目运算
有几个数参与运算就有几个目,比如取反是单目运算~
设置一位为0或是1
int st(int x, int i, int k) {
if (k)
return (x | (1 << i));
else
return x & ~(1 << i);
}
汉明权重
popcount,即一个二进制数中1的个数
状压dp中避免枚举重复状态
求数x汉明权重相同的下一个数(0要特判)
int t = x + (x & -x);
x = t | ((((t&-t)/(x&-x))>>1)-1);
bitset用法
不会用