Frage

Ich bin sehr verwirrt über das Verhalten der linken Schichtfunktion von PHP. Ich benutze es auf zwei verschiedenen Maschinen (Entwickler und Hosting) und sie geben mir verschiedene Antworten. Ich habe es auf diese Berechnung verfolgt:

(-3941404251) << 5;

Auf einer Maschine bekomme ich die Antwort -1570884448; Auf der anderen Seite bekomme ich 0. auf beiden Systemen, Php_int_max = 2147483647. Das später ist ein 32-Bit-System, und das erste A 64-Bit, obwohl PHP als 32-Bit-Prozess ausgeführt wird und immer noch die gleiche Antwort gibt.

Ich kann nur annehmen, dass dies ein Problem mit 32-Bit gegenüber 64-Bit ist, aber es gibt eine einfache Möglichkeit, das gewünschte Verhalten zu erhalten. Wenn mich jemand auf eine Funktion oder so verweisen könnte, wäre das großartig.

Vielen Dank!

War es hilfreich?

Lösung

Der erste Wert ist die richtige Antwort für Ihr Problem. Offizielles Handbuch besagt, dass Sie den Bitwise -Operator auf der Anzahl nicht mehr als max_int verwenden können. Versuchen Sie also mit GMP -Funktionen (zum Beispiel GMP -Funktionen http://www.php.net/manual/en/function.gmp-and.php) und behandeln Sie die Zahl als Zeichenfolge.

Andere Tipps

Führen die Maschinen dieselbe Version von PHP aus? (-3941404251) ist bereits zu groß für einen 32-Bit-Wert, daher vermute ich, dass das "richtige" Ergebnis undefiniert und verschiedene Versionen/Kompilierungen/usw., die unterschiedliche Ergebnisse geben, nicht als Fehler angesehen werden.

Du kannst den ... benutzen BC Math Funktionen, um die Ganzzahlbeschränkungen zu überwinden. Es ist eine Alternative zur GMP -Funktion von ELQ und wahrscheinlich besser unterstützt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top