位运算的技巧
1.去掉最后一位
x>>1
2.在最后加一个0
x<<1
3.在最后加一个1
(x<<1)+1
4.把最后一位变成1
x|1
5.把最后一位变成0
(x|1)-1
6.最后一位取反
x^1
7.把右数第k位变成1
x|(1<<(k-1))
8.把右数第k位变成0
x&(~(1<<(k-1)))
9.右数第k位取反
x^(1>>(k-1))
10.取出末k位
x&((1<<k)-1)
11.取右数第k位
(x>>(k-1))&1
12.把末k位变成1
x|((1<<k)-1)
13.把末k位取反
x^((1<<k)-1)
14.把右边连续的1变成0(从最右边开始)
(x&(x+1))
15.把右边第一个0变成1
x|(x+1)
16.把右边连续的0变成1
x|(x-1)
17.取右边连续的1
(x^(x+1))>>1
18.去掉右边起第一个1的左边
x%(-x)