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!


Anmelden zum Antworten