Пожалуйста, попробуйте этот код.Дистанция Хэмминга - это численность населения с XOR:
void hamming()
{
static const unsigned int BF_LEN = 1024;
char BF1[BF_LEN];
char BF2[BF_LEN];
unsigned int set_bits_count = 0;
float similarity = 0.0f;
memset(BF1,'\0',BF_LEN);
memset(BF2,'\0',BF_LEN);
strcpy(BF1, "BF1 is filled with some characters");
strcpy(BF2, "BF2 is filled with some characters and more");
for(unsigned int j = 0; j < BF_LEN; j += sizeof(T_Uint32))
{
set_bits_count += hammingDistance(*(T_Uint32*)&BF1[j], *(T_Uint32*)&BF2[j]);
}
similarity = 1.0f - set_bits_count/(float)BF_LEN;
printf("%.2f", similarity);
}
//Reference: P. Wegner, Comm. ACM, Vol. 3, Issue 5, 1960.
T_Uint getNrOfBitsSet(T_Uint32 bits)
{
T_Uint bitsSet = 0;
while (bits)
{
bits &= bits - 1; // clears the least significant bit set
++bitsSet;
}
return bitsSet;
}
T_Uint hammingDistance(T_Uint32 a, T_Uint32 b)
{
return getNrOfBitsSet(a^b);
}