Hallo Vinzenz,
Beim Linksschieben erzeugen logisches und arithmetisches Schieben übrigens identische Ergebnisse, hier kommt es also nicht auf die Betrachtungsweise an.
äh, doch. Bei vorzeichenbehafteten Zahlen kann man in diesem Fall das Schieben beim arithmetischen Schieben nicht als gesicherte Multiplikation mit zwei ansehen, oder irre ich mich da?
ja, du irrst dich nicht. ;-)
Dass man bei der Multiplikation irgendwann mit einem Überlauf des zur Verfügung stehenden Zahlenbereichs rechnen muss, ist irgendwie klar. Das unterscheidet aber nicht aritmetische von logischen Shift-Operationen.
PHP hat hier die (für mich unangenehme) Eigenheit, beim Überschreiten des Wertebereichs für Integerwerte automatisch in den Fließkommabereich zu wechseln. Eine Sprache mit fester Typisierung (zum Beispiel C) würde bei den Operationen
0x7FFFFFFF << 1
und
0x7FFFFFFF * 2
dasselbe Ergebnis erhalten, nämlich 0xFFFFFFFE = -2 (32bit-Wertebereich vorausgesetzt). Klarer Fall: Die Multiplikation liefert hier wegen des Überlaufs ein falsches Ergebnis. Aber als Shift-Operation ist das Ergebnis völlig korrekt.
Ciao,
Martin
F: Was ist wichtiger: Die Sonne oder der Mond?
A: Der Mond. Denn er scheint nachts. Die Sonne dagegen scheint tagsüber, wenn es sowieso hell ist.