Der Martin: Bit Operationen

Beitrag lesen

Hallo,

Doch - da es sich bei PHP immer um "signed integers" handelt (d.h. Ganzzahlen mit Vorzeichen), wird beim Rechts-Shift immer das höherwertigste Bit "reingeshiftet". Wenn das 0 ist, wird 0 reingeshiftet, wenn's 1 ist, 1.

richtig, PHP geht immer von *Zahlenwerten* aus.

Wenn Du willst, dass *immer* geshiftet wird, als wären es Zahlen ohne Vorzeichen, musst Du Dir das selbst programmieren:

In manchen "niederen", also maschinennahen Sprachen -wie etwa Assembler auf vielen CPUs- unterscheidet man arithmetisches und logisches Schieben.

Was PHP hier macht, ist arithmetisches Schieben, d.h. die Bitfolge wird immer als vorzeichenbehafteter Zahlenwert betrachtet. Dann wird auch das Vorzeichenbit richtig berücksichtigt, und das Rachtsschieben erzeugt arithmetisch richtige Werte entsprechend der Division durch 2.

Im Gegensatz dazu wird beim logischen Schieben die Bitfolge nicht interpretiert, sondern wirklich nur als Kette von Bits angesehen. Beim Schieben werden von links (oder auch rechts) immer Nullen nachgezogen. Solche Operationen braucht man vor allem dann, wenn man hardwarenah programmiert, oder wenn man den Zahlenwert auf Deubelkommraus als vorzeichenlose Zahl interpretieren möchte.

Beim Linksschieben erzeugen logisches und arithmetisches Schieben übrigens identische Ergebnisse, hier kommt es also nicht auf die Betrachtungsweise an.

Schönen Abend noch,
 Martin

--
Der Stress von heute ist die gute alte Zeit von morgen.