我无法理解这两个函数中的位逻辑。
我不知道我们为什么要检查条件(bitVector & mask)== 0。
另外,为什么我们在满足条件时将 bitVector 与掩码进行 OR 运算,否则将 bitVector 与 ~mask 进行 AND 运算?
为什么有一种属性可以“通过从整数中减去一位并将其与原始整数进行与运算来检查是否设置了一位”?
完整代码在这里。
/* Toggle the ith bit in the integer. */
public static int toggle(int bitVector, int index) {
if (index < 0) return bitVector;
int mask = 1 << index;
if ((bitVector & mask) == 0) {
bitVector |= mask;
} else {
bitVector &= ~mask;
}
return bitVector;
}
/* Check that exactly one bit is set by subtracting one from the
* integer and ANDing it with the original integer. */
public static boolean checkExactlyOneBitSet(int bitVector) {
return (bitVector & (bitVector - 1)) == 0;
}