Was ist der Maximalwert für ein int in PHP?


117

Was ist der größte int-Wert, den Sie in PHP speichern können, wenn Sie die speziellen Bibliotheken ignorieren, mit denen Sie mit sehr großen Zahlen arbeiten können?

Antworten:


124

Aus dem PHP-Handbuch :

Die Größe einer Ganzzahl ist plattformabhängig, obwohl ein Maximalwert von etwa zwei Milliarden der übliche Wert ist (das sind 32 Bit Vorzeichen). PHP unterstützt keine vorzeichenlosen Ganzzahlen. Die Ganzzahlgröße kann mit der Konstanten PHP_INT_SIZE und der Maximalwert mit der Konstanten PHP_INT_MAX seit PHP 4.4.0 und PHP 5.0.5 bestimmt werden.

64-Bit-Plattformen haben normalerweise einen Maximalwert von etwa 9E18, außer unter Windows vor PHP 7, wo es immer 32-Bit war.


15
Nun, unter amd64 Linux, das heutzutage weit verbreitet ist, ist es 9223372036854775807 (2 ^ 63-1)
derobert

4
Das sind viele Ziffern - es gibt den ersten Grund, warum ich mir vorstellen kann, AMD gegenüber Intel zu wählen, wenn ich einen dedizierten Server kaufe. :)
karim79

39
@ karim79, ich denke, es liegt daran, dass der Bogen 64-Bit ist, nicht AMD. =]
Strager

7
AMD64 ist ein Name der 64-Bit-Architektur, die heutzutage sowohl von AMD als auch von Intel verwendet wird. Andere Namen dafür sind x64 und Intel 64. Wie Strager sagt, hat das nichts damit zu tun, dass es AMD ist
Thomasrutter

4
Mein Windows XAMPP-Echo ist 2147483647. Ich hatte AMD Athlon X2
Vova Popov

86

32-Bit-Builds von PHP:

  • Ganzzahlen können zwischen -2.147.483.648 und 2.147.483.647 (~ ± 2 Milliarden) liegen.

64-Bit-Builds von PHP:

  • Ganzzahlen können zwischen -9.223.372.036.854.775.808 und 9.223.372.036.854.775.807 (~ ± 9 Billionen) liegen.

Zahlen sind inklusive.

Hinweis: Einige 64-Bit-Builds verwendeten einmal 32-Bit-Ganzzahlen, insbesondere ältere Windows-Builds von PHP

Werte außerhalb dieser Bereiche werden durch Gleitkommawerte dargestellt, ebenso wie nicht ganzzahlige Werte innerhalb dieser Bereiche. Der Interpreter bestimmt automatisch, wann diese Umschaltung auf Gleitkomma erfolgen muss, basierend darauf, ob der Ergebniswert einer Berechnung nicht als Ganzzahl dargestellt werden kann.

PHP unterstützt keine "vorzeichenlosen" Ganzzahlen als solche und begrenzt den Maximalwert aller Ganzzahlen auf den Bereich einer "vorzeichenbehafteten" Ganzzahl.


1
Interessanterweise können Floats in 32-Bit-Builds die Ganzzahlgenauigkeit auf höhere Werte als Ints beibehalten - Floats können für Integer-Werte bis zu 2 ^ 53 + 1 verwendet werden, die deutlich höher sind als die 2 ^ 31 - 1 von Ints. In 64-Bit-Builds ist dies umgekehrt, da Floats die gleiche Genauigkeit haben, aber Ints jetzt bis zu 2 ^ 63 - 1 sind.
Thomasrutter

21

Die Größe von PHP-Ints ist plattformabhängig :

Die Größe einer Ganzzahl ist plattformabhängig, obwohl ein Maximalwert von etwa zwei Milliarden der übliche Wert ist (das sind 32 Bit Vorzeichen). PHP unterstützt keine vorzeichenlosen Ganzzahlen. Die Ganzzahlgröße kann mit der Konstanten PHP_INT_SIZE und der Maximalwert mit der Konstanten PHP_INT_MAX seit PHP 4.4.0 und PHP 5.0.5 bestimmt werden.

PHP 6 fügt "Longs" (64-Bit-Ints) hinzu.


2
Ich bekomme diese Abstimmungen nicht. Dies ist eine sehr gute Antwort, auch wenn einige zusätzliche Informationen eingegeben wurden. +1, um sie zu korrigieren.
Nickf

3
Diese Antwort lautete ursprünglich "Plattform in abhängig" (nicht abhängig). Es wird auch (noch) behauptet, dass 64-Bit-Ints vor PHP 6 nicht existierten. Dies ist falsch.
Thomasrutter

PHP 6 ist jedoch nie passiert, daher ist es irgendwie irrelevant.
BadHorsie


6

Ah, ich habe es gefunden: 2 32 - 1 (2147483647)

http://au2.php.net/int

Ganzzahliger Überlauf

Wenn PHP auf eine Zahl stößt, die über die Grenzen des Integer-Typs hinausgeht, wird sie stattdessen als Float interpretiert. Außerdem gibt eine Operation, die zu einer Zahl führt, die über die Grenzen des Integer-Typs hinausgeht, stattdessen einen Gleitkommawert zurück.

<?php
$large_number =  2147483647;
var_dump($large_number);
// output: int(2147483647)

$large_number =  2147483648;
var_dump($large_number);
// output: float(2147483648)

8
Dies wäre auf einer 32-Bit-Plattform der Fall. Bedenken Sie auch, dass viele Benutzer Server auf einer 64-Bit-Plattform ausführen.
Thomasrutter

2

Dies hängt von Ihrem Betriebssystem ab, aber 2147483647 ist laut Handbuch der übliche Wert .


6
Dies hängt insbesondere davon ab, ob Sie auf einer 32-Bit-Plattform oder einer 64-Bit-Plattform ausgeführt werden. 32-Bit ist nur "üblich" in einer Welt, in der die meisten Leute 32-Bit-Server betreiben. Dies wird zunehmend nicht mehr der Fall.
Thomasrutter

0

Obwohl PHP_INT_*Konstanten sehr lange existieren, konnten dieselben MIN / MAX-Werte programmgesteuert durch Linksverschiebung bis zum Erreichen der negativen Zahl ermittelt werden:

$x = 1;
while ($x > 0 && $x <<= 1);
echo "MIN: ", $x;
echo PHP_EOL;
echo "MAX: ", ~$x;

0

Es unterliegt der Architektur des Servers, auf dem PHP ausgeführt wird. Für 64-Bit

print PHP_INT_MIN . ", ” . PHP_INT_MAX; ergibt -9223372036854775808, 9223372036854775807

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.