bitweise Operatoren



  • Hallo,

    in der Uni und im C++ Programmierer werden bitweise Operatoren genannt, aber mir wird irgendwie, bis auf eventuelle Genauigkeitsanstiege, nicht klar wofür ich sie brauche.

    Wer hat ein paar Worte

    Danke
    Lou



  • maschinen- bzw. geräteprogrammierung


  • Administrator

    Du brauchst Bitweise-Operatoren, um einzelne Bits manipulieren zu können. Das wird meistens im Embedded Bereich verwendet, wo einzelne Bits an Ein-/Ausgängen hängen. Zum Teil werden über Bitweise-Operatoren auch Masken erstellt, was kompakte Boolsche Variablen sind.

    auto const has_x = 0b00000001;
    auto const has_y = 0b00000010;
    auto const has_z = 0b00000100;
    
    auto var = has_z | has_x;
    
    if(var & has_x)
    {
       // ... in var war das erste Bit gesetzt. Somit ist X enthalten.
    }
    

    Du könntest var auch in drei bool Variablen aufteilen. Macht man meistens auch, wenn man nicht auf Speichergrösse angewiesen ist und weil es leserlicher wie auch weniger fehleranfällig ist. Aber früher wurden gerne solche Masken eingesetzt, weil man eben schonender mit dem Speicher umgehen musste.

    Theoretisch kann man auch gewisse Performance-Optimierungen damit machen.



  • Ist auch für Flags nützlich. Wenn du nicht 10 Parameter durchschleifen willst, könnte man sie zu einem int kombinieren.



  • @Dravere @Mechanics @Wade1234

    Okay, cool! Danke für die rapide Antwort!



  • Registerwerte (von Ein-/Ausgabebausteinen) beinflussen.

    Testen auf gerade/ungerade.

    Statusinformationen platzsparend zusammen fassen.



  • @Dravere sagte in bitweise Operatoren:

    Theoretisch kann man auch gewisse Performance-Optimierungen damit machen.

    Wichtiger Punkt. Auch wenn man heutzutage mit dem RAM nicht mehr so sparsam umgehen muss - zumindest ein Speicher ist immer noch ziemlich begrenzt: Der CPU-Cache 😉



  • @Mechanics sagte in bitweise Operatoren:

    Ist auch für Flags nützlich. Wenn du nicht 10 Parameter durchschleifen willst, könnte man sie zu einem int kombinieren.

    Genauso nutze ich es auch. Aber erst wenn so minimum 3 - 4 Flags zusammengekommen sind. Auch bei meinen TCP-Protokollen setze ich solche Flags ein, um direkt nach dem MsgType mittels Flags darzustellen, welcher Inhalt in der Message enthalten ist.


  • Banned

    Bitweise Operatoren in Cpp sind 'Und(&)', 'Oder(|)', 'Xor(^)' und 'Invert(~)'
    a&b -> Bits = 1, die in beiden Operanden auf 1 sind.
    a|b -> Bits = 1, die in mindestens einem Operand 1 sind.
    a^b -> Bits =1, die in beiden Operanden unterschiedl. sind.
    ~a -> Bits =1, die vorher 0 waren.



  • @RBS2 Bei dem letzten Beispiel müsste es ~ sein (invertiert allerdings alle Bits)


  • Banned

    @yahendrik sagte in bitweise Operatoren:

    @RBS2 Bei dem letzten Beispiel muss es ~ sein.

    Danke!
    Du hast Recht.
    ! ist da um logische Ausdrücke umzudrehen.
    Beitrag ist ausgebessert.


Log in to reply