Hallo Christian,
$a &= (~ $z);
~ ist der Negierungsoperator (NOT), da werden alle Bits
vertauscht.
Hm. Negierungs-Operator gefaellt mir nicht, auch in der Dokumentation
nicht. Bei einer Negierung erwarte ich, dass das Ergebnis hinterher
das Gegenteil dessen ist, was es vorher war (true oder false).
Der ~-Operator bildet das »B-1«-Komplement, also das Muster, dass
man zu einer Zahl addierne muss, um ein vollstaendiges 1er-Muster zu
bekommen.
Uebrigens wird der Ausdruck oben benutzt, um ein bestimmtes Bitmuster
auszuschalten:
$a sei 11011001 binaer
$z sei 10000000 binaer
$a &= (~ $z) heisst dann $a = 11011001 & (~10000000) heisst dann
11011001 & 01111111 was damit 01011001 ist (das in $z gesetzte Bit
ist jetzt ausgeschaltet).
$a |= 0x40000000;
$a = $a | 0x40000000;
0x40000000 ist eine Hex-Zahl und steht für 1073741824 dezimal oder
1000000000000000000000000000000 binär.
Wuerde man in C der besseren Lesbarkeit wegen allerdings eher so
schreiben:
1<<30
denn nichts anderes will man ja mit dieser Zahl: das 30e Bit auf
1 gesetzt. In PHP wuerde der Bitshift allerdings jedesmal
ausgefuehrt, deshalb schreibt man da bereits die richtigen[tm]
Zahlen hin.
Grüße,
CK