Einschub, weil ich jetzt schon 3 Minuten 0-en zähle
das schreibt man nicht so. Programmierer sind faule Hunde. Das hier zu
lesen und zu analysieren erfordert viel zu viel Aufwand und ist auch
viel zu fehleranfällig zu schreiben.
Erstens:
In C ist ALLES logisch wahr, was ungleich 0 ist. Ob in deinem Ausdruck
daher das Bitmuster 0b00010000 oder 0b00000001 rauskommt, spielt
überhaupt keine Rolle. Ungleich 0 ist ungleich 0.
Daher: Du brauchst dir das eine ausmaskierte Bit nicht zurechtschieben.
Daher
macht exakt und genau das gleiche wie deine Version. Der einzige
Unterschied: Du laufst in deiner Version Gefahr, dass die Anzahl der
Verschiebungen nicht stimmt und dann kommt nicht 1 raus, sonder 0. Und
das ist dann tatsächlich ein logisches FALSE.
Also: in C gilt
ein Wert von 0 gilt als logisch FALSE
ein Wert ungleich 0 gilt als logisch TRUE
und bei ungleich 0 spielt es keine Rolle, was der Wert genau ist. Er
darf nur nicht 0 sein.
Zweitens:
Diese ewige 0-en Zählerei in den Binärkonstanten ist genauso
fehleranfällig. Überhaupt dann, wenn du nicht alle 8 Bits eines Bytes
anschreibst.
1 | if( PIND % (1 << PD4) )
|
jetzt braucht kein Mensch mehr 0-en zählen. Auch ein Blinder kann hier
greifen, dass du den Pin PD4 abfrägst. Die Abfrage lautet in normalem
Deutsch: Wenn Bit 4 am Port PIND auf 1 ist, dann mach was.
Und in dieser Schreibweise gibt es dann auch kaum mehr blödsinnige
Fehler, die nur deshalb entstehen, weil man sich irgendwo mit den 0-en
und 1-en verzählt hat.
Aber: Das ist nicht das Problem. So wie du das geschrieben hast, läuft
es aufs gleiche raus. Es ist nur schwerer zu lesen und es gibt mehr
Möglichkeiten für Schreibfehler.
Und es dauert 5 mal so lange, sich davon zu überzeugen, dass die Abfrage
in Ordnung ist.