Forum: PC-Programmierung Bitzuweisung


von Tom (Gast)


Lesenswert?

hallo,

wie kann man in C einzelne Bits von einer Variablen (Typ char) einer
anderen Variablen (Typ char) zuweisen?

z.B.:
char Var1,Var2,Var3;

Bit 0 von Var 1 = Bit 2 von Var 3
Bit 1 von Var 1 = Bit 7 von Var 2
Bit 2 von Var 1 = Bit 6 von Var 2
...

mfg

Tom

von Rufus T. Firefly (Gast)


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.

von ---- (Gast)


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).

von Ralf (Gast)


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

von Rufus T. Firefly (Gast)


Lesenswert?

Quaddash hat wie üblich recht.

Der Ansatz von Ralf ist ein wenig ineffizient.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.