Don P: 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.

Also hatte ich da recht. Das höchste Bit gehört nicht zur Zahl, sondern signalisiert das Vorzeichen.

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

Das ergibt dann aber rein rechnerisch falsche Ergebnisse. Eine auf diese Art rechtsgeshiftete Binärzahl ergibt nicht mehr eine Division durch 2^^n (n=Anzahl Verschiebungen).

Wenn ich auf meinem Win32-System -1 in den Bordrechner eingebe, ist die DWord-Binärdarstellung:
11111111111111111111111111111111

Für -2 ist es:
11111111111111111111111111111110
usw.

Das heißt: Um den Betrag einer negativen int Zahl zu erhalten,
z.B. von -2:
11111111111111111111111111111110
muss man zuerst das Ganze invertieren:
00000000000000000000000000000001
und dann noch 1 addieren:
00000000000000000000000000000010

Somit ist klar, dass deine neue rechts-shift-Funktion zwar funktioniert, aber nicht mehr richtig rechnet. Aber das wusstst du ja.
Habe es hier nur der Vollständigkeit halber nochmal deutlich gemacht.

Gruß, Don P