位运算是既基础又好用的运算方法,它的实用性主要体现在状态压缩DP上,这也是状态压缩DP的难度所在,
如果不了解位运算,状态压缩DP会觉得很难理解。。。
接下来是位运算的实现技巧:
如果要获得 n 的第 i 位的数据(0还是1),判断(n&(1<<i)),若真,为1,假,为0;
//这里的第 i 位为从右往左从0开始数的
如果要设置 n 的第 i 位为1,n=(n |(1<<i));
如果要设置 n 的第 i 位为0,n=(n &(~(1<<i));
如果要取出 n 的最后一个1 (lowbit):(n &(-n)) (这里利用的是负数取反加1实际上改变的是二进制最低位的1这个性质)
如20(10100)得到 4(100)