找出已更改的位数(按位运算符)

Finding out number of bits that have changed (bitwise operator)

我有一个根据用户输入生成的位串。我还有另一个位串,用于对生成的位串执行按位 &。我想知道的是如何从 & 操作中找出生成的位串中有多少位发生了变化。所以假设我有 10000101 作为生成的位串,00101111 作为我用于 & 操作的第二个位串。该过程的输出应为 1,因为只有生成位串的第一位发生了变化。我怎么做?

你要找的是按位异或(异或),或者a^b

   10000101 ^ 00101111 → 10101010

在逻辑上等同于(~a&b) | (a&~b)

您需要将结果与原始结果进行异或以确定更改了哪些位:

changedBits = (userInput & generatedInput) ^ userInput

然后,你需要计算changedBits值的Hamming Weight

int hammingWeight(int i) {
     i = i - ((i >>> 1) & 0x55555555);
     i = (i & 0x33333333) + ((i >>> 2) & 0x33333333);
     return (((i + (i >>> 4)) & 0x0F0F0F0F) * 0x01010101) >>> 24;
}

int numberOfChangedBits = hammingWeight(changedBits);

根据您输入的位数进行调整。