Hallo Andavos,
zeroFill ist eine Funktion, aber ich würde gerne wissen was ^ und & macht. Ich glaube nicht das ^ für Hoch steht.
^ und & sind Bitoperatoren. D.h. für jedes Bit der beiden angegebenen Variablen / Werte wird dieser Operator angewendet. ^ ist XOR, & ist AND.
Folgende Tabelle stellt dar, was bei einzelnen Bits passiert:
Wert 1 | Wert 2 | Ergebnis (XOR)
-----------+------------+--------------------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 0
Wert 1 | Wert 2 | Ergebnis (AND)
-----------+------------+--------------------
0 | 0 | 0
0 | 1 | 0
1 | 0 | 0
1 | 1 | 1
Damit ist bei zwei Zahlen aus 3 Bits folgendes gegeben:
001 XOR 101 = 100
001 AND 101 = 001
Und noch:
$a >>= 1;
$a >>= 1; ist das gleiche wie $a = $a >> 1;
Der >>-Operator verschiebt die Bits alle nach rechts. In diesem Fall um 1; $a >>= 2; würde den Inhalt von $a um 2 nach rechts verschieben usw.
Wenn Du eine Zahl, die aus einem Byte besteht, hast, dann passiert folgendes:
Urpsprungszahl: 01000100
Um eins nach rechts verschoben: 0100010
Mit 0 aufgefüllt: 00100010
$a &= (~ $z);
~ ist der Negierungsoperator (NOT), da werden alle Bits vertauscht. Bitweise betrachtet gilt:
NOT 1010 = 0101
$a &= ...; ist das gleiche wie $a = $a & ...;
& ist der AND-Operator. (s.o.)
$a |= 0x40000000;
$a = $a | 0x40000000;
0x40000000 ist eine Hex-Zahl und steht für 1073741824 dezimal oder 1000000000000000000000000000000 binär. | ist der logische OR-Operator mit folgender Tabelle:
Wert 1 | Wert 2 | Ergebnis (OR)
-----------+------------+--------------------
0 | 0 | 0
0 | 1 | 1
1 | 0 | 1
1 | 1 | 1
$a >>= ($b-1);
Hier wird $a um $b-1 nach rechts verschoben. (s.o.)
Siehe auch: http://de3.php.net/manual/de/language.operators.bitwise.php.
Viele Grüße,
Christian