Forum: Compiler & IDEs |= und =


von Jörg (Gast)


Lesenswert?

vielleicht eine blöde Frage, wo ist der Unterschied zwischen den beiden
Zeilen?

ADMUX = (1<<MUX2);
und
ADMUX |= (1<<MUX2);

danke

mfg
Jörg

von Zoltan (Gast)


Lesenswert?

1. Fall
Zerlegen wir die erste Zeile:
MUX2 ist ein define für das dritte Bit im ADMUX Register. Demnach ist
MUX2 gleich 2, also könnte man auch schreiben (1<<2).
1<<2 bewirkt, dass eine 1 um zwei stellen nach rechts rückt, also aus
00000001b wird 00000100b.
In der ersten Zeile wird das komplette ADMUX-Register mit diesem Wert
überschrieben.


2. Fall
Im zweiten Fall mit ADMUX |= (1<<MUX2) oder ADMUX = ADMUX |(1<<MUX2)
wird bitweise ver-ODER-t. Das bedeutet, dass die bereits gesetzen Bits
im ADMUX Register nicht gelöscht werden, sondern nur das gewünschte Bit
gesetzt wird. Ein Beispiel mit ADMUX = 11010000b.
ODER
11010000b
00000100b
--------
11010000b


3. Fall
Nun wollen wir vielleicht dieses gesetzte Bit wieder löschen. Das
geschieht mit:
ADMUX &= ~(1<<MUX2);
- 1<<MUX2 ist wieder 00000100b
- Das ~ negiert die alle Bitts, also entsteht 11111011b
- Nun wird ge-UND-et
Z.B. mit ADMUX = 11010100b
UND
11010100b
11111011b
---------
11010000b


1. Fall liefert 00000100b
2. Fall liefert 11010100b
3. Fall liefert 11010000b

von Jörg (Gast)


Lesenswert?

vielen Dank, sehr ausführlich!

von Zoltan (Gast)


Lesenswert?

Oben ist mir beim ODER-n ein kliener Fehler unterlaufen:
das sollte heißen:

ODER
11010000b
00000100b
--------
11010100b

Gruss
Zoltan

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.