写在前面: 位运算时每一位都是独立的, 都可以拆开运算。(扩: 每个进制位的加减运算都可以独立进行, 这也是数位DP的状态分析和转移方式。)
分配律
a&(b|c) = (a&b)|(a&c)
a^(b|c)=(a ^ b) | (a ^ c)
结合律
(a|b)|c = a|(b|c)
(a&b)&c = a&(b&c)
(a^ b)^ c = a^(b ^c)
交换律
a|b = b|a
a&b = b&a
a^b = b^a
其它
a|0 = a
a&1 = a
a&0 = 0
a^a = 0
a^0 =a
a|~a = 1
a&~a = 0
a&a = a
a|a = a
a|(a&b) = a
a&(a|b) = a
一些应用
1.一个数 &1 就是二进制的最末位, 1就是奇,0就是偶; 用于取数 &111 就是取三位;
2.一个数 |1 就是把二进制的最末位强行变1;用于赋值 |100 就是把第三位赋值为1;
3.一个数 ^1 就是检验最后一位是否相同;相同返回1,不同返回