二进制位运算

· · 个人记录

& 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

去掉最后一个零 >>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