Forum: Compiler & IDEs Was macht folgender Ausdruck:


von Markus _. (markush)


Lesenswert?

if( PIND & 1<< PD6 ){ ...

1.) Zustände von PortD werden eingelesen (z. B. 0b0100 0000)
2.) UND-Verknüpfung von 1.) mit 0b0000 0001 = 0b0000 0000
3.) Das Ergebnis aus 2.) wird nach logisch links geschoben um den Wert 
von PD6

Ist das Ergebnis nicht immer 0, sofern nicht PIND0 = 1 ist??? Helft mir 
mal bitte.

Markus

von Stefan Salewski (Gast)


Lesenswert?

Und was macht
if( PIND & (1<< PD6) ){ ...

von bone (Gast)


Lesenswert?

nein, der schiebe-operator "<<" hat eine höhere priorität als das 
bitweise und "&" !!!
somit:
1.) Zustände von PortD werden eingelesen (z. B. 0b0100 0000)
2.) die "1" wird um "PD6" nach links geschoben 0b0000 0001 = 0b0100 0000
3.) Die resultate werden bitweise verUNDet..

if ist "true" wenn Bit nummer "PD6" im "PIND" high-level aufweist, 
ansonsten "false"

von bone (Gast)


Lesenswert?

if( PIND & (1<< PD6) ){

^^

macht somit das gleiche, wie das obere von markus!

von Markus _. (markush)


Lesenswert?

Prüfen ob PD6 gesetzt ist, klar. Hier ist der Ausdruck zum prüfen ja in 
extra klammern.
Bei meinem Beispiel waren die Klammern halt expliziet nicht gesetzt, 
oder hat hier das 1<<PD6 Vorrang vor dem PIND & Ausdruck?

Wahrscheinlich denke ich nur wieder viel zu kompliziert...

von bone (Gast)


Lesenswert?

^^habe ich doch schon beantwortet :(

nein, der schiebe-operator "<<" hat eine höhere priorität als das
bitweise und "&" !!!

von Markus _. (markush)


Lesenswert?

Ja, habs schon gesehen, danke. War zu langsam! :)

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.