Hallo Gerhard,
du hast schon recht. & bzw. | nehmen eine Bit-Weise verknüpfung vor. Die Auswirkung ist, dass ein Ausdruck
op1 & op2 & op3 ...
komplett ausgewertet wird.
&&, || gehen aber nicht Bit-Weise vor. Das heißt, folgende Ausdrücke werden nicht vollständig ausgewertet.
true || false || true ... ===> true, gleich nach dem ersten true.
false && true && true ... ===> false, gleich nach dem ersten false.
Für ein ODER genügt es, wenn ein Operand true ist, damit der komlette Ausdruck true wird. Umgekehrt verhält sich UND. Wenn mind. ein Operand false ist, ist der gesamte Ausdruck false. Das heißt, der Computer kann ein wenig Rechenzeit sparen, wenn er mit der Auswertung abbricht, sobald das Ergebnis des Ausdrucks ohnehin feststeht.
So ist folgender Code z.B. sicher, das heißt, es findet kein Zugriff auf ein nicht initialisiertes Array-Element statt.
int i = 0;
int array[5] = {1, 1, 0, 1, 1};
for (i = 0; i < 100; i++) {
if ((i < 5) && (array[i] == 1)) {
// Irgendwas ...
}
}
Obwohl i bis 100 hochgezählt wird, wird der Ausdruck (array[ i ] == 1) nur ausgewertet für (i < 5). Würde statt && auf & zurückgegriffen werden, wäre dem nicht so.
Gruß,
Dennis