转自:http://blog.csdn.net/zmx354/article/details/19930191
学习状态压缩 必需要先搞懂位运算 这是集中位运算的符号与其作用。
名称
|
C/C++样式 | Pascal样式 | 简记法则 |
按位与 | & | and | 全一则一,否则为零 |
按位或 | | | or | 有一则一,否则为零 |
按位取反 | ~ | not | 是零则一,是一则零 |
按位异或 | ^ | xor | 不同则一,同样则零 |
左移位 | << | shl | a<<k等价于a*2k |
右移位 | >> | shr | a>>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