我有些困惑这两个函数中的位逻辑。
我不知道为什么要检查条件(bitVector & mask) == 0。
当条件满足时,为什么要将bitVector与mask进行OR运算,否则要将bitVector与~mask进行AND运算?
为什么存在一种属性,可以“通过从整数中减去1并将其与原始整数进行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;
}
return bitVector ^ (~bitVector ^ mask);
是否能够胜任? - jsheeran