转自:http://blog.youkuaiyun.com/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
本文详细介绍了位运算的基础知识,包括按位与、按位或、按位取反、按位异或、左移位和右移位等操作符及其使用场景。并通过实例展示了如何利用位运算获取和修改特定位的值。
12万+

被折叠的 条评论
为什么被折叠?



