Bitshifting (Bitwise)



  • Hi,

    Ich hab mal ne Frage zu Bitshifting.
    Wenn man eine Char-Variable hat (=8 Bit), wie kann ich dann die einzelnen Bits setzen und auslesen?
    Also wie kann ich das 1 und 7 Bit setzen (1) und Bit 2 und 8 nicht setzen (0)?
    Und wie kann ich die Bits bei einer Variable auslesen, ob diese gesetzt sind oder nicht?

    Auf ein Beispiel mit Erklärung würde ich mich freuen 🙂



  • setzen kannst du bits (am besten) mit dem bitweisen oder:

    int erstesBit = 1; // 0000 .... 0001
    int i = 2; // 0000 .... 0010
    i |= erstesBit;
    // i = 0000 ... 0011
    

    und abfragen mit dem bitweisen und:

    int drittesBit = 4; // 0000 ... 0100
    int i = 6; // 0000 ... 0110
    int j = 3; // 0000 ... 0011
    
    if ( (i & drittesBit) == drittesBit ) ) // true
    //gesetzt
    else
    // nicht gesetzt
    ....
    if ( (j & drittesBit) == drittesBit ) ) // false
    //gesetzt
    else
    // nicht gesetzt
    


  • template<class T> T set(const T &v, unsigned b) {
      return v | (1 << b);
    }
    
    template<class T> T unset(const T &v, unsigned b) {
      return v & ~(1 << b);
    }
    
    template<class T> bool test(const T &v, unsigned b) {
      return bool(v & (1 << b));
    }
    

    (bei templates ist das inline glaub implizit)



  • Nun hab ich's geschnallt!
    Danke für eure Tipps 🙂


Anmelden zum Antworten