我有一个根据用户输入生成的字符串。我还有另一个用于执行按位和放大的位串。使用生成的位串。我想知道的是如何找出生成的位串中有多少位已从&操作。因此,如果我将10000101作为生成的位字符串而将00101111作为第二位字符串用于&操作。由于只有生成位串的第一位发生了变化,因此该过程的输出应为1。我怎么做?
答案 0 :(得分:2)
您要寻找的是按位XOR(仅限OR)或a^b
:
10000101 ^ 00101111 → 10101010
在逻辑上等同于(~a&b) | (a&~b)
答案 1 :(得分:1)
您需要对原始结果进行异或,以确定哪些位已更改:
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);
根据输入的位数进行调整。