Raphael: Funktioniersweise Bitoperator

Hallo Leute,

ich versuche gerade Code zu lesen und zu verstehen :

Folgendes ist mir nicht 100% klar:

$schnitt{$id} |= 5;

Ist es richtig, daß diese Anweisung dem Hashschlüssel "$id" den Wert 2^5 = 32 zuweist ?

Quasi die rechte Seite soviel bedeutet, wie 5. Bit der 2er Potenz ist gesetzt ?

Was mich wundert :

Wenn ich jetzt ein:

print "$schnitt{$id}" ausgebe, erscheint nur die 31 .

Wie ist diese Differenz von 1 zu erklären ?

Hängt das mit der 2^0 zusammen ?

Vielen Dank und Gruß,

Raphael

  1. hi,

    folgende Ergänzung !

    Bei dieser Anweisung in einer Schleife:

    "$schnitt{$id} |= $i;"

    wird doch bei jedem neuen Schleifendurchlauf ein neuer Wert zugewiesen, und der alte Wert wird verworfen und bei der neuen Zurodnung nicht mehr berücksichtigt ?

    Also das verhält sich gegensätzlich als z.B. ein " $variable .= $wert " ?

    Viele Grüße,

    Raphael

    Hallo Leute,

    ich versuche gerade Code zu lesen und zu verstehen :

    Folgendes ist mir nicht 100% klar:

    $schnitt{$id} |= 5;

    Ist es richtig, daß diese Anweisung dem Hashschlüssel "$id" den Wert 2^5 = 32 zuweist ?

    Quasi die rechte Seite soviel bedeutet, wie 5. Bit der 2er Potenz ist gesetzt ?

    Was mich wundert :

    Wenn ich jetzt ein:

    print "$schnitt{$id}" ausgebe, erscheint nur die 31 .

    Wie ist diese Differenz von 1 zu erklären ?

    Hängt das mit der 2^0 zusammen ?

    Vielen Dank und Gruß,

    Raphael

    1. Hallo Raphael,

      Bei dieser Anweisung in einer Schleife:

      "$schnitt{$id} |= $i;"

      wird doch bei jedem neuen Schleifendurchlauf ein neuer Wert zugewiesen, und der alte
      Wert wird verworfen und bei der neuen Zurodnung nicht mehr berücksichtigt ?

      $schnitt{$id} |= $i;

      ist das gleiche wie

      $schnitt{$id} = $schnitt{$id} | $i;

      Also das verhält sich gegensätzlich als z.B. ein " $variable .= $wert " ?

      Nein.

      Grüße,
       CK

      --
      Das Leben ist wie ein Kartenspiel: was dir gegeben wurde, ist vorbestimmt. Doch wie du damit spielst, ist deine Entscheidung.
  2. Hallo Raphael,

    $schnitt{$id} |= 5;

    Ist es richtig, daß diese Anweisung dem Hashschlüssel "$id" den Wert 2^5 = 32 zuweist ?

    Nein. Du verknüpfst die Bits, die dazu nötig sind, 5 darzustellen (101) mit dem Inhalt
    von $schnitt{$id}.

    print "$schnitt{$id}" ausgebe, erscheint nur die 31 .

    Die Bitmaske ist 11111. Du hast vorher mit 101 ODER-verknüpft, das heisst, du hattest
    entweder die ganze Zeit 11111 im Hash oder du hattest 11110 oder du hattest 11011 oder
    du hattest 11010 im Hash.

    Grüße,
     CK

    --
    If God had a beard, he'd be a UNIX programmer.