Erkenntnis des Tages (12.06.09)
Eigentlich hatte ich ja den Brückentag frei, aber man lässt’s ja dann doch nicht ganz und ich habe weiter an den Mathe-Webcasts gearbeitet. Dabei habe ich mal einen genauen Blick auf die Operatoren && und & geworfen (gilt natürlich auch für || und |).
Beide lassen sich in einer if-Abfrage verwenden und machen grundlegend erstmal das selbe: eine Logische Und-Verknüpfung (bzw. bitweises UND) von Bool-Operanten. Es gibt jedoch einen wichtigen Unterschied: Der einfache Operator (& oder |) ist ein Bitoperator und ist eigentlich für die Berechnung von bitweisen Berechnungen zuständig, && hingegen ist für Vergleiche “optimiert”. Wenn eine Bedingung bei der Auswertung zu Beginn schon einen eindeutigen Wert liefert, dann wird der Rest der Bedingung überhaupt nicht mehr ausgewertet.
bool x = true;
int i = 10;
if (x | ++i > 10) {
…
}
Das einfache Oder sorgt für eine vollständige Auswertung der Bedingung und zählt i eins nach oben (i=11). Mit einem “||” bricht die Auswertung bereits beim ersten Teil an, da x=true ist und somit die Bedingung immer zutrifft, egal was noch nach dem Oder folgt. i würde dann 10 bleiben und Computer hat sich Rechenzeit gespart.