压缩dp的位运算

来源:互联网 发布:鹏博士云计算业务中心 编辑:程序博客网 时间:2024/05/20 23:56

      压缩dp用到了二进制位运算上的东西,整理一下基本内容。

      位运算的几个基本操作:

          1、移位(<<   >>)

          2、按位与(&)

          3、按位或(|)

          4、非(~)

          5、异或(&)

      每个都很简单,c++上都学过,难的实在那几个巧妙的利用上。

          1、判断一个数二进制下第i位是0或1           (x & (1<<(i-1)))>0

               1<<(i-1)构造出来(...100...)(后面i-1个0),与x做与运算;由于其他位都是0,故相当于只有第i位在做与运算,而构造出来的为1,所以相当于只判断x的第i位。同理,可用(3<<(i-1))、(5<<(i-1))...判断x的连续几位。

          2、把x的第i位改为1            x=(x |(1<<(i-1)))

               同上。

          3、把x的第i位改为0            x=(x & ~(1<<(i-1)))

               ~(1<<(i-1))相当于构造出来(111101111)(只有第i位为0)的数,做与运算第i位一定为0.

          4、把x二进制下最靠右的第一个1去掉     x=(x & (x-1))

               


原创粉丝点击