位运算

92 阅读1分钟

转自:blog.csdn.net/zmx354/arti…

\

学习状态压缩 必须要先搞懂位运算  这是集中位运算的符号与其作用。

名称C/C++样式Pascal样式简记法则
按位与&and全一则一,否则为零
按位或|or有一则一,否则为零
按位取反~not是零则一,是一则零
按位异或^xor不同则一,相同则零
左移位<<shla<<k等价于a*2k
右移位>>shra>>k等价于a/2k

优先级: not>and>xor>or;

 

 

位运算的应用:

(1) 获取一个或多个固定为的值

假设x = 1010(10进制的10)

我们要获取从右边第二位的值,那么我们可以这样来获取

x&(1<<1)也就是

x:       1010

1<<1:         0010

x&(1<<1):  0010

这样我们就可以通过判断x&(1<<1)是否等于0来知道这一位是0还是1了。


x&(1<<n)  就是获取第n-1位的值。


(2) 把一个或多个固定为的值置为零

假设x = 1010(10进制的10)

我们要把从右边第二位的值置为零,那么我们可以这样来做

x&(~(1<<1))也就是

x            1010

~(1<<1)           1101

x&(~(1<<1)) 1000

x&(~(1<<n))  就是把x的第n-1位变成0

\

\