我如何测试任何N位中的两个位模式是否不同(位置无关紧要)

Ces*_*sar 2 comparison bit

假设我有这个位字段值: 10101001

我如何测试任何其他值是否有任何不同n.没有考虑职位?

例:

10101001
10101011 --> 1 bit different 

10101001
10111001 --> 1 bit different

10101001
01101001 --> 2 bits different

10101001
00101011 --> 2 bits different
Run Code Online (Sandbox Code Playgroud)

我需要进行大量的比较,所以我主要是寻找性能,但任何提示都非常受欢迎.

Sim*_*son 11

获取两个字段的XOR并对结果进行人口统计.


Toa*_*oad 5

如果你将2个值混合在一起,那么只剩下不同的位.

然后,您只需计算仍为1的位,即可获得答案

在c:

 unsigned char val1=12;
 unsigned char val2=123;
 unsigned char xored = val1 ^ val2;
 int i;
 int numBits=0;
 for(i=0; i<8; i++)
 {
      if(xored&1) numBits++;
      xored>>=1;
 }
Run Code Online (Sandbox Code Playgroud)

虽然可能有更快的方法来计算字节中的位数(例如,您可以使用256个值的查找表)