位操作在算法中的运用

来源:互联网 发布:看图学英语软件 编辑:程序博客网 时间:2024/05/21 16:59

位操作在算法中的运用

 

 

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