Bitzuweisung

Gast #200100
Lesenswert?

Nur umständlich.

Var1 = (Var1 & 0xFE) | ((Var3 >> 2) & 1);
Var1 = (Var1 & 0xFD) | ((Var2 >> 6) & 2);
Var1 = (Var1 & 0xFB) | ((Var2 >> 5) & 4);

Der erste Ausdruck maskiert die bei der Zuweisung nicht zu verändernden
Bits in Var1 aus, der zweite Ausdruck verschiebt das auszuwertende Bit
in Var3 bzw. Var2 an die korrekte Bitposition und maskiert die anderen
Bits aus.

Werden alle 8 Bits von Var1 auf diese Art und Weise gesetzt, dann kann
der erste Ausdruck komplett entfallen, wenn Var1 vorher mit 0
initialisiert wird.
Gast #200101
Lesenswert?

> Var1 = (Var1 & 0xFE) | ((Var3 >> 2) & 1);
und statt 0xFE kann man hier auch ~0x01 schreiben, das etwas einfacher
zu lesen/verstehen ist (-> Geschmackssache). Also:
Var1 = (Var1 & ~0x01) | ((Var3 >> 2) & 0x01);

----, (QuadDash).
Gast #200102
Lesenswert?

Ich würde eine Routine schreiben, die als 1.Parameter das Byte bekommt,
dessen Bit abgefragt wird, und als 2.Parameter welches Bit geprüft
werden soll. Der Rückgabe ist entweder 0 oder 1.

Einer zweiten Routine kann man dann das Ergebnis zusammen mit dem zu
modifizierenden Bit und dem Byte selbst übergeben.

Gruß Ralf

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren