Zwei Bits vertauschen
-
Wie kann ich mit den (wenigen) Operatoren, die mir in C++ zur Verfügung stehen zwei Bits in einer Binärzahl vertauschen?
Schön wäre eine Funktion, bei der man nur die Zahl, Position 1 und Position 2 übergeben könnte. Für Lösungsansätze wäre ich dankbar.
-
also du willst 2 bits an bestimmten bit-Positionen in einem zB int vertauschen?
prüf doch einfach erstmal ob die beiden bits gesezt sind (mit op&) , wenn sie gleich sind, brauchst du gar nix machen, wenn sie andersrum sind setz die bits entsprechend anderesrum
-
Wo ist dein Problem? Kannst du so eine Funktion implementieren (Dreieckstausch)?
void swap(int *a, int *b); /*Tause den Inhalt von a und b*/
Oder hast du Probleme, auf die einzelnen Bits zuzugreifen?
(Stichwort bitweise-und)
-
@Taurin Ja, es hatte eigentlich am Zugriff auf ein Bit an einer bestimmten Stelle gescheitert.
Ich hab jetzt die Variante von Shady genommen und sie scheint auch zu funktionieren:
if (!((!(zahl&(1<<pos1)) && !(zahl&(1<<pos2))) || ((zahl&(1<<pos1)) && (zahl&(1<<pos2))))) { zahl = zahl ^ (1<<pos1); zahl = zahl ^ (1<<pos2); }
Meint ihr, dass diese Variante akzeptabel ist oder doch ziemlich "rechenintensiv"? (Auch wenn Bit-Operationen ja sehr schnell sind)
Oder hab ich wirklich zu kompliziert gedacht und es geht sehr viel einfacher bzw. schneller?
-
kann man schon noch bißchen optimieren, zB:
int m1= (1<<pos1); int m2= (1<<pos2); bool b1= (zahl & m1); bool b2= (zahl & m2); if (b1!=b2) { int mask=m1+m2; zahl^=mask; }
-
Vielen Dank!