Frage

Ich schreibe ein neues Programm, das 2 zwei Ziffern unsignierte Ganzzahl vergleicht. Vergleich durch Hamming -Entfernungen. Aber mein Algorithmus funktioniert nicht perfekt. Kannst du mir sagen, was mit diesem Code los ist :( Vielen Dank !!

Dies ist meine Zählmethode;

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 und B 8 -Bit -Binärdateien.

 PrintInBinary(a);
 PrintInBinary(b);

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

Lassen Sie mich Ihnen die Ausgabe zeigen;

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

Lösung

Legen Sie Paranthesen um N & 1 und M & 1.

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

http://ideone.com/f7kyzg

Das liegt daran, dass! = Ist vor &: http://www.swansontc.com/sopc.html

Andere Tipps

Sie müssen sich verschieben m Auch um die richtigen Teile zu vergleichen.

Und Sie müssen sie unabhängig davon verändern, ob der Gleichstellungstest besteht. (Bewegen Sie die Schichten außerhalb des Innens } )

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top