Hallo zusammen if (!(PINB & (1<<PIN1))) ... ist sicherlich eine richtige Abfrage. Was aber passiert bitte bei dieser Abfrage ? if (~(PINB & (1<<PIN1))) ... Danke im voraus und Grüße
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.
Okay - habe ich verstanden, so glaube ich. Also ALLE Bits werden EINZELN negiert. Das klärt meine Frage an sich. Grüße
Gast
#1723776
Das ist genauso eine richtige Abfrage, die macht nur was anderes. a) Was versteht C unter "wahr" oder "falsch"? b) Was liefert (PINB & (1<<PIN1)) für ein Ergebnis (Typ und Wert?) c) siehe http://home.fhtw-berlin.de/~junghans/cref/SYNTAX/logical.html http://home.fhtw-berlin.de/~junghans/cref/CONCEPT/bitwise.html#one Oliver
John Schmitz schrieb: > Also ALLE Bits werden EINZELN negiert. Das klärt meine Frage an sich. Alle Bitoperationen arbeiten auf den Bits eines Bytes einzeln. Bitoperationen: & | ~ ^ Alle logischen Operationen liefern entweder 0 oder 1 und akzeptieren 0 (für 'falsch') und nicht 0 (für 'wahr') logische Operationen: && || !
Antwort schreiben
Bitte melde dich an, um einen Beitrag zu schreiben.