Christian Seiler: Logische Ausdrücke (für Spezis)

Beitrag lesen

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