Forum: Compiler & IDEs Verständnisproblem bei " if ( !(PINB & (1<<PINB2)) )"


von carly (Gast)


Lesenswert?

Hallo Zusammen,

ich hab da ein Verständnisproblem für die Abfrage auf "0";
PINB hat bei mir den Signalzustand 1111 1011; Warum wird dann die 
nachfolgende "if" Anweisung nur bei diesem Signalzustand ausgeführt??; 
der Klammerausdruck (1<<PINB2) ergibt doch 0000 0100; wenn ich jetzt 
1111 1011 UND 0000 0100 verknüpfe erhalte ich doch 0000 0000 das ganze 
negiert erhalte ich 1111 1111; die nachfolgende if Anweisung wird doch 
dann immer ausgeführt egal welchen "PINB" Wert ich habe????
Ich würde mich freuen, wenn mir jemand helfen könnte.
carly

von Jörg W. (dl8dtl) (Moderator) Benutzerseite


Lesenswert?

! ist keine (bitweise) Negation.  Es ist eine logische Operation.

Verständlicher wäre das geschrieben als:
1
if ((PINB & (1 << PINB2)) == 0) {
2
  ...
3
}

Die (bitweise) UND-Verknüpfung ,filtert' das Bit PINB2 heraus, und
die Bedingung ist erfüllt, wenn dieses Bit 0 ist, da alle anderen
Bits nach dem UND immer 0 sind.  Das Ergebnis hängt damit ausschließlich
vom Wert von PINB2 ab.

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.