获取二进制表示中最右侧为 1 的比特位
已知 -x = ~x + 1 ,我们可以使用 x & (-x) 得到二进制表示中最右侧的 1:
| 1 | 若 x 的二进制表示为: | 
其中 JDK 中的 Integer.lowestOneBit 就采用了以上的方法实现:
| 1 | /** | 
去除二进制表示中最右侧为 1 的比特位
因为 x - 1 会使最低位 1 右侧的 0 全部变为 1 且最低位 1 同时变为 0,所以我们使用 x & (x - 1) 可以去除最低位的 1:
 
已知 -x = ~x + 1 ,我们可以使用 x & (-x) 得到二进制表示中最右侧的 1:
| 1 | 若 x 的二进制表示为: | 
其中 JDK 中的 Integer.lowestOneBit 就采用了以上的方法实现:
| 1 | /** | 
因为 x - 1 会使最低位 1 右侧的 0 全部变为 1 且最低位 1 同时变为 0,所以我们使用 x & (x - 1) 可以去除最低位的 1:
