Forum: Mikrocontroller und Digitale Elektronik Bitmanipulation, Schieberegister - Verständnisfrage


von Stefan (Gast)


Lesenswert?

Hi,

ich habe eine Verständnisfrage:


Im Tutorial http://www.mikrocontroller.net/articles/Bitmanipulation
steht geschrieben:


<< = Links schieben (Bsp: a<<b ist das gleiche wie a * 2^b)


desweiteren steht dort geschrieben:

#define MEINBIT0 0
#define MEINBIT1 1
#define MEINBIT2 2
PORTB |= ((1 << MEINBIT0) | (1 << MEINBIT2)); // setzt Bit 0 und 2 in 
PORTB auf "1"

(1 << n) : Zuerst wird durch die '<<'-Ausdrücke eine "1" n-mal nach 
links geschoben. Dies ergibt somit (in Binärschreibweise) 0b00000001 für 
(1 << MEINBIT0) und 0b00000100 für (1 << MEINBIT2).


Aber die Beiden Verfahren sind doch nicht gleich, rechne ich nach dem 1. 
Beispiel:

1*2^0 | 1*2^2
somit wäre Bit 1 und Bit 4 betroffen, nicht Bit 0 und Bit 2

Kann mir jemand auf die Sprünge helfen?

Danke,

gruß Stefan

von hohoho (Gast)


Lesenswert?

Stefan schrieb:
> 1*2^0 | 1*2^2
> somit wäre Bit 1 und Bit 4 betroffen, nicht Bit 0 und Bit 2
>
> Kann mir jemand auf die Sprünge helfen?

Es sind Bit 0 und 2 betroffen,
Bit 2 hat aber den Wert 4 ( dezimal ), das ist dein Fehler.

von Philip (Gast)


Lesenswert?

1*2^0 | 1*2^2
= 1 | 4

in binär ist das dann:
0001 | 0100
= 0101

Man sieht also, dass bit 0 und bit 2 gesetzt wird.

von Josef D. (jogedua)


Lesenswert?

1*2^0= 1 = 0b00000001; Bit 0 ist gesetzt
1*2^2= 4 = 0b00000100; Bit 2 ist gesetzt

von Stefan (Gast)


Lesenswert?

Alles klar,
vielen Dank für die Hilfe

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.