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