Bitweise Vergleiche
Dieter
- php
Hallo ;-)
Durch Zufall bin ich im Manual auf bitweise Vergleiche gestoßen. Kann mir jemand näher erläutern zu was man diese genau braucht und mir verständlich machen, wie das mit denen funktioniert (eventuell ein Beispiel)?
Ich blicke da ehrlich nicht ganz durch. Für Hilfe wäre ich da echt dankbar :)
MfG,
Dieter
echo $begrüßung;
Durch Zufall bin ich im Manual auf bitweise Vergleiche gestoßen.
Da bin ich noch nicht drauf gestoßen. Wenn du mal die Stelle, die du meinst, hier verlinken/nennen könntest...
Wenn du allerdings die bitweisen Operatoren meinst...
Kann mir jemand näher erläutern zu was man diese genau braucht und mir verständlich machen, wie das mit denen funktioniert (eventuell ein Beispiel)?
Die braucht man immer dann, wenn man auf Bit-Ebene etwas erreichen will. Beispielsweise könnte man mit den Error-Reporting-Konstanten über den bitweisen Oder-Operator mehrere Werte miteinander verbinden.
E_ERROR 000000000001
E_CORE_ERROR 000000010000
E_USER_ERROR 000100000000
|
= 000100010001
Oder E_NOTICE von E_ALL abziehen, damit man alle Meldungen außer den Notizen bekommt. Dazu Und-verknüpft man das Komplement (bitweise Negation) von E_NOTICE mit E_ALL
E_NOTICE 000000001000
~ 111111110111
E_ALL & 011111111111
= 011111110111
echo "$verabschiedung $name";
gudn tach!
Durch Zufall bin ich im Manual auf bitweise Vergleiche gestoßen.
wo genau? (was genau soll denn bitweise verglichen werden? strings, dateien, zahlen?)
z.b. wird der operator & oft als bitweiser vergleich beschrieben. was er macht:
& vergleicht stellenweise die bits und liefert 1, wenn beide stellen 1 sind, sonst 0. also
0 & 0 = 0
0 & 1 = 0
1 & 0 = 0
1 & 1 = 1
wenn 0 fuer "false", 1 fuer "true" und & fuer "und" stuende, haette man einfach einen logischen &&-operator. aber & operiert eben _bitweise_.
bei zwei zahlen z.b. 5 und 6 vergleicht & die binaere darstellung stellenweise (=bitweise) und liefert als ergebnis 4. huch. warum? darum:
5 ist binaer 101
6 ist binaer 110
bitweise & 100
und binaer 100 ist dezimal 4
erklaerung zu binaerer rechnung findet sich z.b. in der deutschen wikipedia oder hier. englischsprachig findet man da aber meist besseres: z.b. http://en.wikipedia.org/wiki/Binary_numeral_system und http://en.wikipedia.org/wiki/Bitwise_operation.
so, wo brauch man sowas nun? dedlfix hat ja, wie ich gerade sehe, bereits ein beispiel genannt, naemlich flags. das hantieren von flags ist bitweise viel handlicher als aeh anders. ein weiteres beispiel hatten wir hier letztens im forum: </archiv/2005/8/t113838/#m723681>
ausserdem kann man das & auch als strikten und-operator ansehen.
$i=1;
if(0==1 && ++$i) foo;
print $i;
// schreibt 1, denn nachdem 0==1 false ist, brauch der rest ja nicht mehr weiter behandelt zu werden. das && ist nicht-strikt.
// dagegen mit bitweisem UND:
$i=1;
if(0==1 & ++$i) foo;
print $i;
// schreibt 2, da das bitweise UND seinen dienst streng verrichtet (genauer: es vergleicht bitweise 0 und 2 und liefert 0, toll).
wenn du also mal auf der strasse wieder ein paar informatiker sich pruegeln siehst, weil der eine der meinung ist, dass & ein bitweiser operator sei und der andere der meinung ist, dass & ein striktes UND sei, dann kannst du sie beide beschwichtigen und ihnen mitteilen, dass sie beide recht haben... obwohl der erste ja eigentlich mehr recht hat als der zweite, weil die striktheit nur eine folge aus dem bitweisen vergleich ist, aber das sagst du ihnen besser erstmal nicht, sonst hauen sie sich gleich wieder auf's maul und beziehen dich in ihre klopperei womoeglich noch mit ein. und das waer ja doof.
prost
seth