位操作在算法中的运用

位操作在算法中的运用

 

 

1. 与操作&

100 & 111 = 100

 

2. 或操作|

100 | 000 = 100

 

3. 异或^

100 ^ 000 = 100

 

4. 取反~

~100 = 011

 

5. 向左移位<<

1<<2 = 100

即2的2次方,等于4

 

6. 向右移位>>

16>>2 = 00100

即16的2的-2次方,等于4

 

note1:

移位和与操作结合,用来判断一个数的某一位是否为1,这个功能可以用在subset,即子集问题中。

例如:

判断数字8的第三位是否为1?

8&(1>>3)==1?

 

note2:

移位和或操作结合,用来将一个新的二进制位存储到一个整形数中,这个功能常用于优化内存,或者某些棋盘类型的问题中。

例如:将下面的棋盘保存为一个整形数

1 0

0 1

int a = 0;

a |=(number<<i)

 

note3:

移位和异或操作结合,用来将数字的某一位取反,用在棋盘类型的问题中。

例如:

1 0

0 1

转为1001

若对坐上角1取反,则结果应为1001^=(1<<3)

   1001

^  1000

=----------------

   0001

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值