1. 基本运算
首先明确: 基本位运算规则, 不依赖正负.
定义: 对于a, b两个位向量: [aw-1, aw-2, …, a0] 和 [bw-1, bw-2, …, b0], 将a&b定义为一个长度为w的位向量, 其中第i个元素等于ai&bi,
0
≤
i
0\leq i
0≤i
<
w
<w
<w. 类似 |, ^, ~ 定义同理.
1.1 & 与
对应位全部为1, 对应结果位为1, 否则为0.
0110 & 1100 = 0100
1.2 | 或
对应位有1个位为1, 对应结果位为1, 否则为0.
0110 | 1100 = 1110
1.3 ^异或
对应位互异, 对应结果位为1, 否则为…
0110 ^ 1100 = 1010
1.4 ~ 非
将原来的位, 1 变为0 , 0 变为1.
~ 1100 = 0011
2. 应用场景
这里取a为两个字节为例, a为任意个位亦成立. 细细体会, 定有收货.
2.1 运算结果全部不变:
a & 0xFFFF
a | 0
a ^ 0
2.2. 运算结果全部取反:
a ^ 0xFFFF
~a
2.3. 结果部分不变, 部分取反
a ^ 0x00FF
2. 4. 设置指定位为0
其他位不变, 也可称只取指定位/丢弃指定位(掩码, 如 chmod - x):
a & 0x00FF
2. 5. 设置指定位为1
其他位不变, 如chmod + x:
a | 0xFF