Frage zu while schleife
-
Hi,
Bin dabei mich in Xlib einzuarbeiten.
Kann mir einer sagen was genau in der folgenden Schleife passiert?int red_shift=0; while (!(red & 1)) { red >>= 1; red_shift++; }
wobei red auf red_mask vom visual zeigt.
Ich verstehe nämlich nicht was ">>=" bedeutet.
-
red>>=1;
entspricht
red = red >> 1;
Der Wert von red wird um ein bit nach rechts verschoben und der neue Wert wieder in red abgespeichert.
-
und was ist mit "while(!(red & 1))"?
-
Die Bedingung für die while-Schleife ist wahr, solange das niederwertigste Bit von red _nicht_ (wegen der Negation) gesetzt ist.
01000110 (möglicher Wert für red) & 00000001 (die 1) = 00000000 (also false) aber: 01000101 & 00000001 = 00000001 (also true)
PS: & ist der bitweise UND-Operator
-
mit anderen worten, eine gerade zahl
-
Ja. Die schnellere Variante von !(red%2).
-
TactX schrieb:
Ja. Die schnellere Variante von !(red%2).
nein.
-
O.K. es hängt wohl von der CPU und/oder vom (optimierenden) Compiler ab, so gesehen könnten beide durchaus gleich schnell sein. Aber die Lösung mit der Maske wird wohl nie langsamer sein.