【发布时间】:2016-11-30 06:45:53
【问题描述】:
我无法理解这两个函数中的位逻辑。
我不知道我们为什么要检查条件(bitVector & mask)== 0。
另外,为什么我们在满足条件时将 bitVector 与 mask 进行 OR,否则将 bitVector 与 ~mask 进行 AND?
为什么有一个属性可以“通过从整数中减去一位并将其与原始整数进行与运算来检查是否设置了一个位”?
完整代码here.
/* 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;
}
【问题讨论】:
-
对于 1 和 2,最好拿一张纸和一支笔写下一些内容。您将看到它的效果如何,它将帮助您正确理解它。
-
你应该从阅读this开始
-
对于
toggle函数,return bitVector ^ (~bitVector ^ mask);会完成这项工作吗?
标签: java bit-manipulation permutation palindrome bitvector