seth: Bitweise Vergleiche

Beitrag lesen

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