Funktioniersweise Bitoperator
Raphael
- perl
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
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
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
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