Dieter: Bitweise Vergleiche

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

  1. 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";

  2. 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