二进制位运算
Varuxn
2021-04-23 09:17:56
& 1&1=1 ,1&0=0 ,0&0=0
| 1|1=1 ,1|0=1 ,0|0=0
^ 1^1=0 ,1^0=1 ,0^0=0
```cpp
去掉最后一个零 >>1
在最后加一个零 <<1
在最后加一个1 x<<1+1
把最后一位变成1 x | 1
把最后一位变成0 x & ~1
最后一位取反 x ^ 1
把右数第K位变成1 x | (1<<(k-1))
把右数第k位变成0 x & ~(1<<(k-1))
右数第K位取反 x ^ (1<<(k-1))
把最右面连续的1变成0(从最右开始) x & (x+1)
把右起第一个0变成1 x | (x+1)
把最右面连续的0变成1(从最右开始) x | (x-1)
取末尾K位 x &((1<<k)-1)
把末尾K位变成1 x | ((1<<k)-1)
末尾K位取反 x ^ ((1<<k)-1)
取右数第K位 (x>>(k-1)) & 1
```