位运算
n & k
:按位与运算,检查 n 和 k 的二进制位是否在相同位置都为 1。
(n & k) == k
:代表将 n和k 都转换为二进制,能否将n转换为k,假如 n 为13(1110),k 为 4(0100),那么这里首先判断是否能够转换,也就是将第1、3为转换为0,则n和k保持一致
n ^ k
:这个操作是按位异或,产生一个新的二进制数,表示 n 和 k 在每一位上的差异
- 如果 n 和 k 的某一位相同(都是 0 或都是 1),异或结果该位是 0。 --相同为0
- 如果 n 和 k 的某一位不同(一个是 1,另一个是 0),异或结果该位是 1。–不同为1
通常我们都是统计不同的个数,利用bitCount来进行处理:
Integer.bitCount(n ^ k)
:返回 n ^ k 的二进制表示中 1 的个数,也就是 n 需要多少次 1 变成 0 来变成 k