Pergunta

Escrevo um novo programa que compara 2 dois dígitos não assinados. Compara -se por distâncias de hamming. Mas meu algoritmo não funciona perfeitamente. Você pode me dizer o que há de errado com este código :( muito obrigado !!

Este é o meu método de contagem;

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;
}

Binários A e B de 8 bits.

 PrintInBinary(a);
 PrintInBinary(b);

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

Deixe -me mostrar a sua saída;

Enter two unsigned integers (0-99): 55 64
Your choices are 55 and 64
Number A: 00110111
Number B: 01000000
Hamming distance is ; 5
Foi útil?

Solução

Coloque paranteses em torno de N & 1 e M & 1.

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

http://ideone.com/f7kyzg

Isso é porque! = É antes e: http://www.swansontec.com/sopc.html

Outras dicas

Você precisa mudar m Também para comparar os bits certos.

E você precisa mudá -los, independentemente de o teste de igualdade passar. (Mova os turnos para fora do interior } )

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top