- 算法中常用位操作
1.1 异或操作
x ^ 0 = x
x ^ 1111...1111 = ~x
x ^ (~x) = 1111...1111
x ^ x = 0
a ^ b = c ==> a ^ c = b ==> b ^ c = a
a ^ b ^ c = a ^ (b ^ c) = (a ^ b) ^ c
1.2 构造特殊的Mask,将特殊位置放0或者1
x & (~0 << n) // 将x右边n位清零
(x >> n) & 1 // 获取x的第n位值(0或者1)
x & (1 << (n - 1)) // 获取x的第n位幂值
x | (1 << n) // 仅将第n位置为1
x & (~(1 << n)) // 仅将第n位置为0
x & ((1 << n) - 1) // 将x最高位至第n位清零(包含第n位)
x & (~((1 << (n + 1)) -1)) // 将第n位至第0位清零
1.3 有特殊意义的&操作运算
x & 1 == 1 是否是奇数
x & = (x - 1) 将最低位(LSB)的1清零
x & ~x = 0
常用算法复杂度分析
O(1) < O(logn) < O(n) < O(nlogn) < O(n^2) < O(n^3) < O(2^n)
关注微信公众号,C++/C/go语言免费电子书,视频教程逐步更新