Подсчет расстояния хэмминга для 8-битных бинарных значений на языке C

StackOverflow https://stackoverflow.com/questions/19824740

Вопрос

Я пишу новую программу, которая сравнивает 2 двухзначных целых числа. Сравнивается по расстоянию хэмминга. Но мой алгоритм не работает идеально. Можно сказать мне, что не так с этим кодом :( Большое спасибо !!

Это мой метод подсчета;

int countHammDist(unsigned int n, unsigned int m)
{
int i=0;
unsigned int count = 0 ;
for(i=0; i<8; i++){
if( n&1 != m&1 ) {
    count++;
    }
n >>= 1;
m >>= 1;

}
return count;
}

A и B 8 -битные двоичные файлы.

 PrintInBinary(a);
 PrintInBinary(b);

 printf("\n %d", countHammDist(a,b));

Позвольте мне показать вам вывод;

Enter two unsigned integers (0-99): 55 64
Your choices are 55 and 64
Number A: 00110111
Number B: 01000000
Hamming distance is ; 5
Это было полезно?

Решение

Поместите параранты вокруг N & 1 и M & 1.

if ((n&1) != (m&1))

http://ideone.com/f7kyzg

Это потому, что! = Есть раньше &: http://www.swansontec.com/sopc.html

Другие советы

Вам нужно изменить m тоже, чтобы сравнить правильные биты.

И вам нужно сдвинуть их независимо от того, пройдет ли тест на равенство. (Переместите смены за пределами внутреннего } )

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top