1. 位运算常用技巧
- 整数n的二进制表示中,第k位是0还是1(注意个位对应第0位)
//先把第k位移动到最后一位
n >> k
//再看一下第k位是什么
n & 1
//合并在一起
n >> k & 1
- lowbit(x):返回x的最后一位1
x & (-x)
也即
x & (~x + 1) //给个例子模拟一下验证
//c++中负数是对应正数的补码 -x = ~x + 1
- 去掉最低位的1
n = n & (n - 1)
//先把第k位移动到最后一位
n >> k
//再看一下第k位是什么
n & 1
//合并在一起
n >> k & 1
x & (-x)
也即
x & (~x + 1) //给个例子模拟一下验证
//c++中负数是对应正数的补码 -x = ~x + 1
n = n & (n - 1)