2 Stimmen

Wie vergleicht man zwei Bitwerte in C?

Ich habe ein wenig mit C herumgespielt und finde die Möglichkeit, Bits direkt zu manipulieren, faszinierend und mächtig (und gefährlich, wie ich annehme). Ich war neugierig, was der beste Weg wäre, um verschiedene Bits in C zu vergleichen sein würde. Zum Beispiel wird die Zahl 15 in Binärform dargestellt als:

00001111

Und die Zahl 13 wird dargestellt als:

00001101

Wie würden Sie vergleichen, welche Bits unterschiedlich sind, ohne sie zu zählen? Es wäre einfach, Shifts zu verwenden, um festzustellen, dass 15 4 1en und 13 3 1en enthält, aber wie würden Sie den Unterschied zwischen den beiden ausgeben (z. B. dass die 2^1-Stelle zwischen den beiden unterschiedlich ist)? Ich kann mir einfach keinen einfachen Weg vorstellen, dies zu tun. Jeder Hinweis würde sehr geschätzt werden!

EDIT: Ich sollte klargestellt haben, dass ich weiß, XOR ist der richtige Weg, um dieses Problem zu gehen, aber ich hatte ein Problem mit der Umsetzung. Ich schätze, mein Problem war der Vergleich eines Bits nach dem anderen (und nicht die Erzeugung der Differenz per se). Die Lösung, die ich gefunden habe, ist:

 void compare(int vector1, int vector2) {         
     int count = 0; 
     unsigned int xor = vector1 ^ vector2;

     while (count < bit_length) {
          if (xor % 2 == 1) { //would indicicate a difference
               printf("%d ", count);
          }
          xor >>= 1; 
          count++;
      }  
 }

17voto

Mateen Ulhaq Punkte 21111

Verwenden Sie bitweise Operationen:

c         = a         ^ b        ;
00000010b = 00001111b ^ 00001101b;

Was ^ oder XOR, ist:

0 ^ 0 = 0
1 ^ 0 = 1
0 ^ 1 = 1
1 ^ 1 = 0

Eine Möglichkeit wäre es, darüber nachzudenken:

Wenn die beiden Operanden ( a y b ) unterschiedlich sind, ist das Ergebnis 1 .
Wenn sie gleich sind, ist das Ergebnis 0 .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X