Negierte if_Abfrage - Effekt eines Bit Vergleichs ?

#1723768
Lesenswert?

John Schmitz schrieb:


> Was aber passiert bitte bei dieser Abfrage ?
>
>   if (~(PINB & (1<<PIN1))) ...

! ist die logische Negierung

    aus 0           wird   1
    aus nicht 0     wird   0

Bei der bitweisen Negierung mit ~ wirst du in deinem Fall jedoch nie 0 
erhalten.

Denn entweder das Bit ist 0, dann kommt bei ~ 0xFF raus
Oder aber das Bit ist 1. Dann sind aber die anderen Bits deswegen 
trotzdem noch 0, und deren Negierung sorgt für 1 BIts im Ergebnis. Das 
Ergebnis hat dann zwar an der Stelle PIN1 eine 0, aber die restlichen 
Bits sind 1.

-> in keinem der beiden Fälle kommt 0 raus. Und damit ist das ein 
Vergleich der immer wahr sein wird.

Hinweis: Bei Bitfragen ist es oft hilfreich sich einfach die möglichen 
Fälle aufzuschreiben und die Operation(en) im Kopf zu machen. Bei dir 
ist nur 1 Bit beteiligt, daher gibt es nur 2 Fälle: Bit ist 0 bzw. Bit 
ist 1. Und dann siehst du dir einfach die Ergebnisse an und was sie in 
deinem konkreten Anwendungsfall bedeuten.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren