Auf bits zugreifen
-
Hallo Leute,
Gibt es ne möglichkeit in c um auf die einzelnen bits einer Variablen zuzugreifen?
Muss nämlich nur einzelne Bits kopieren und damit ein Kommandowort wür ein externes Gerät erstellen, dazu müsste ich Bits aus einer Variable an eine gewisse Stelle einer anderen schreiben.Wäre toll wenn mir jemand helfen könnte!
-
dürfte im internet stehen wie das geht.
-
Wo finde ich da was dazu?
-
über die suchtmaschine google.
-
Bit setzen geht mit '|' (bitweise oder)
Bit löschen mit '&' (bitweise und)Hilfreich sind die Operatoren '<<' und '>>' (bitshiften) und '~' (Bits kippen).
Beispiele:
int zahl = 3; zahl = zahl | (1 << 4); // setze bit 4 zahl = zahl & ~2; // lösche bit 2 (und mit Maske b111111101) if( (zahl & (1 << 4)) != 0) { // Bit 4 ist gesetzt }
-
niemand schrieb:
Bit setzen geht mit '|' (bitweise oder)
Bit löschen mit '&' (bitweise und)Bit invertieren mit '^' (bitweises xor)
@Lx386
Eines solltest du bei diesen Bitarbeiten aber beachten. Sofern nicht vorgegeben, solltest du besser mit unsigned Typen arbeiten, da es bei signed Typen gewisse Fallstricke gibt. Speziell wenn du mit den Shift Operatoren arbeitest.
-
Du kannst ganz einfach prüfen ob ein Bit gesetzt ist, indem du es mit dem Bitweisen-Und und einer Bit-Maske prüfst.
Bsp: Du willst prüfen ob das 4. Bit deiner Variable gesetzt ist.
Sagen wir deine Variable hat den Wert 83.var : 0101 0011 // = 83
mask: 0000 1000 // = 8Ich hab hier jetzt mal nur die untersten 8 Bits genommen aber das ist bei den höherwertigen Bits auch nicht anders!
Jetzt verknüpfst du deine Variable und die Maske mit &
var & mask = 0000 0000
Wenn das 4. Bit (das was du in der Maske auf 1 hast) nicht gesetzt ist, ist das Ergebnis nach dem & immer 0.Bsp: Du willst prüfen ob das 7. Bit deiner Variable gesetzt ist.
Die Variable ist wieder 83var : 0101 0011 // = 83
mask: 0100 0000 // = 64Jetzt verknüpfst du wieder mit &
var & mask = 0100 0000
Wenn also das 7. Bit (das was du in der Maske auf 1 hast) gesetzt ist, ist
das Ergebnis nach dem & immer nicht 0.Du kannst also so vorgehen:
int iZahl; // Die Variable die du prüfen willst // Prüfen ob 1. (niederwertigstes) Bit gesetzt ist if(iZahl & 0x01) { // Bit ist gesetzt } else { // Bit ist nicht gesetzt } // ... // Prüfen ob 8. Bit gesetzt ist if(iZahl & 0x80) { // Bit ist gesetzt } else { // Bit ist nicht gesetzt } // ...
Ich hoffe das hilft dir