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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.