获取二进制表示中最右侧为 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: