位运算即是在位级别进行操作的技术,合适的位运算能够帮助我们得到更快的运算速度与更小的内存使用。

常见的位运算:

  • 测试第k位:s & (1 << k)
  • 设置第k位:s |= (1 << k)
  • 第k位置零:s &= ~(1 << k)
  • 切换第k位值:s ^= ~(1 << k)
  • 乘以2^n:s << n
  • 除以2^n:s >> n
  • 交集:s & t
  • 并集:s | t
  • 减法:s & ~t
  • 交换:x = x ^ y ^ (y = x)
  • 取出最小非0位(Extract lowest set bit):s & (-s)
  • 取出最小0位(Extract lowest unset bit):~s & (s + 1)
  • 交换值:x ^= y; y ^= x; x ^= y;