算法通关村第十一关|青铜|位运算常用技巧

以下变量均为有符号整数。

1.位运算性质

幂等律:a & a = a, a | a = a

交换律:a & b = b & a, a | b = b | a, a ^ b = b ^ a

结合律:(a & b) & c = a & (b & c), (a | b) | c = a | (b | c), (a ^ b) ^ c = a ^ (b ^ c)

分配律:(a & b) | c = (a | c) & (b | c), (a | b) & c = (a & c) | (b & c), (a ^ b) & c = (a & c) ^ (b & c)

德摩根律:~(a & b) = (~a) | (~b), ~(a | b) = (~a) & (~b)

取反运算性质:-a = ~(a - 1)

与运算性质:a & 0 = 0, a & (-1) = a, a & (~a) = 0

或运算性质:a | 0 = a

异或运算性质:a ^ 0 = a, a ^ a = 0

2.位运算常用技巧

a & (a - 1) :将 a 的二进制表示的最后一个 1 变成 0.

a & (~a + 1) :只保留 a 的二进制表示的最后一个 1 ,其他的 1 都变成 0.

(num & (1 << i)) :获取第 i 位是 1 还是 0.

num | (1 << i) :将第 i 位置 1.

num & ~(1 << i) :将第 i 位置 0.

num & ~(1 << i) | (v << i) :将第 i 位更新为 v.

如果对您有帮助,请点赞关注支持我,谢谢!❤
如有错误或者不足之处,敬请指正!❤
个人主页:星不易 ❤
算法通关村专栏:不易|算法通关村 ❤

你可能感兴趣的:(不易,算法通关村,算法,java,算法通关村)