Moin Robert,
Zitat von
Fussball-Robby:
Mir ist übrigens aufgefallen, dass das völliger Quatsch war, da das AND bei der If-Abfrage das gleiche ist wie das andere. Da wird ja auch nur überprüft, ob das Bit beim Ergebnis der beiden If-Abfragen gesetzt ist, und nur wenn beide gesetzt sind, ergibt AND = true.
Da sag' ich mal Jain.
In der Standardeinstellung ist "Complete boolean evaluation" abgeschaltet. Ein logischer Ausdruck in einer (if)-Abfrage wird also, standardmässig, nur soweit ausgewertet, bis entschieden ist, wie das Ergebnis ausieht. Hast Du da also ein AND stehen, wird der Ausdruck rechts vom AND nicht mehr geprüft, wenn der linke schon false ergibt.
Als Operator verwendet (wie bei (i and 1)) werden hingegen beide Seiten berücksichtigt. Ansonsten würde (i and 1) true ergeben, wenn i ungleich 0 ist, und false, wenn i gleich 0 ist.
In C gibt es dafür auch zwei verschiedene Symbole nämlich && für den Vergleich und & für die bitweise Verknüpfung.