异或
相同的 bit 进行异或运算结果为 0,不同则为 1。
若对 bit 进行异或 1 运算可以使对应 bit 取反,对 bit 进行异或 0 运算可以保持对应 bit 不变。
1 | 0 ^ 0 = 0 |
获取二进制表示中最低位的 1
因为 -x = ~x + 1
会使最低位的连续的 1 都变为 0,而最低位的 0 变为 1,所以我们使用 x & (-x)
可以得到最低位的 1:
1 | 若 x 的二进制表示为: |
去除二进制表示中最低位的 1
因为 x - 1
会使最低位 1 右侧的 0 全部变为 1 且最低位 1 同时变为 0,所以我们使用 x & (x - 1)
可以去除最低位的 1:
1 | 若 x 的二进制表示为: |