www.mikrocontroller.net

Forum: PC-Programmierung Bitzuweisung


Autor: Tom (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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.

Autor: ---- (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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).

Autor: Ralf (Gast)
Datum:

Bewertung
0 lesenswert
nicht 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

Autor: Rufus T. Firefly (Gast)
Datum:

Bewertung
0 lesenswert
nicht lesenswert
Quaddash hat wie üblich recht.

Der Ansatz von Ralf ist ein wenig ineffizient.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [avrasm]AVR-Assembler-Code[/avrasm]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.