XOR ^ Verknüpfung

OnDemand

Top Contributor
HAllo zusammen,

kann mir jemand von Euch meinen Denkfehler ausmerzen?

Ich soll 2 Strings mit XOR verknüpfen und das Ergebnis als binär ausgeben.

Meine Lösung:
Java:
	int zahl1 = 1234567;
		int zahl2 = 9876543;
		System.out.println("Wert1 = " + zahl1 + "- Entspricht: " + Integer.toBinaryString(zahl1));
		System.out.println("Wert2 = " + zahl2 + "- Entspricht: " + Integer.toBinaryString(zahl2));		
		System.out.println("Ergebnis als Zahl: " + (zahl1 ^ zahl2) + "\nErgebnis in binär: "+ (Integer.toBinaryString(zahl1 ^ zahl2)));
Ergebnis:
Code:
Wert1 = 1234567- Entspricht: 100101101011010000111
Wert2 = 9876543- Entspricht: 100101101011010000111111
Ergebnis als Zahl: 8676024
Ergebnis in binär: 100001000110001010111000


ABER:
In einer anderen Aufgabe, heißt es, XOR vergleicht 2 Werte bitweise zB:
10100100 ^ 00100101 = 10000001
Das Ergebnis resultiert daher, weil

Code:
1 !=  0   -> 1

0 == 0   -> 0

1 == 1   -> 0

0 == 0   -> 0

0 == 0   -> 0

1 == 1   -> 0

0 == 0   -> 0

0 != 1   -> 1

Warum ist dann aber mein obiges "Ergebnis in binär" so völlig unterschiedlich, als wenn ich auch dort jedes Zeichen von Wert1 und Wert2 vergleiche.

Irgendwie steh ich da grad so richtig auf dem Schlauch und hab nen fetten Denkfehler. Würde mich über Tipps freuen. Ich hoffe meine Frage kann jemand nachvollziehen :bloed:

LG
 
Der Denkfehler ist, dass Du nicht bedacht hast, dass Integer.toBinaryString führende Nullen nicht mit darstellt. Deswegen sind die beiden Strings unterschiedlich lang, obwohl ints natürlich immer 32Bit haben. Für den korrekten händischen bitweisen vergleich musst Du Wert1 solange vorne mit 0 auffüllen, bis beide Strings gleich lang sind. Dann kommt es hin.
 
Zuletzt bearbeitet von einem Moderator:
Tatsache, dann passt das Erebnis, also ist ja meine Lösung korrekt 😛

Wie könnte ich das jetzt mit Code machen, dass die Nullen aufgefüllt werden?
 
Du könntest auch Zeichen für Zeichen vergleichen mit .charAt(int) das Ertebnis schreibst du dann in einen String als Zeichen. Das sähe dann in etwa so aus:

char vergleich=str1.charAt(0)&str2.charAt(0);
str+=vergleich;

(um einen lässt sich das noch kürzen)
das halte ich für einfacher.

Eine Routine, die den längeren String abschneidet oder einfach aufhört zu vergleichen, wenn der kürzere String zuende ist, müsstest du auch noch implementieren.
 

Neue Themen


Zurück
Oben