压缩dp的位运算

      压缩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))

               


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值