これら 2 つの関数のビット ロジックを理解できません。
条件 (bitVector & mask) == 0 をチェックしている理由がわかりません。
また、条件が満たされたときに bitVector と mask を OR し、それ以外の場合は bitVector と ~mask を AND するのはなぜですか?
「整数から 1 を減算し、それを元の整数と AND することによって、正確に 1 ビットが設定されていることを確認する」ことができるようなプロパティがあるのはなぜですか?
完全なコードはこちら。
/* 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;
}