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