¿Cuál es el valor máximo para un int en PHP?

117

Ignorando las bibliotecas especiales que le permiten trabajar con números muy grandes, ¿cuál es el valor int más grande que puede almacenar en PHP?

nickf
fuente

Respuestas:

124

Del manual de PHP :

El tamaño de un número entero depende de la plataforma, aunque un valor máximo de aproximadamente dos mil millones es el valor habitual (es decir, 32 bits con signo). PHP no admite enteros sin signo. El tamaño entero se puede determinar usando la constante PHP_INT_SIZE y el valor máximo usando la constante PHP_INT_MAX desde PHP 4.4.0 y PHP 5.0.5.

Las plataformas de 64 bits suelen tener un valor máximo de aproximadamente 9E18, excepto en Windows anterior a PHP 7, donde siempre era de 32 bits.

karim79
fuente
15
Bueno, en amd64 linux, que es bastante común hoy en día, es 9223372036854775807 (2 ^ 63-1)
derobert
4
Son muchos dígitos: es la primera razón que se me ocurre para elegir AMD en lugar de Intel al comprar un servidor dedicado. :)
karim79
39
@ karim79, creo que se debe a que el arco es de 64 bits, no a AMD. =]
extraño
7
AMD64 es uno de los nombres de la arquitectura de 64 bits que utilizan tanto AMD como Intel en estos días. Otros nombres para él incluyen x64 e Intel 64. Como dice Strager, nada que ver con que sea AMD
thomasrutter
4
Mi XAMPP echo de Windows 2147483647. Tenía AMD Athlon X2
Vova Popov
86

Compilaciones de PHP de 32 bits:

  • Los números enteros pueden ser de -2,147,483,648 a 2,147,483,647 (~ ± 2 mil millones)

Compilaciones de PHP de 64 bits:

  • Los números enteros pueden ser de -9,223,372,036,854,775,808 a 9,223,372,036,854,775,807 (~ ± 9 quintillones)

Los números son inclusivos.

Nota: algunas compilaciones de 64 bits alguna vez usaron enteros de 32 bits, en particular las compilaciones de PHP más antiguas de Windows

Los valores fuera de estos rangos se representan mediante valores de punto flotante, al igual que los valores no enteros dentro de estos rangos. El intérprete determinará automáticamente cuándo debe realizarse este cambio a punto flotante en función de si el valor de resultado de un cálculo no se puede representar como un número entero.

PHP no tiene soporte para enteros "sin signo" como tales, limitando el valor máximo de todos los enteros al rango de un entero "con signo".

thomasrutter
fuente
1
Curiosamente, en compilaciones de 32 bits, los flotantes pueden retener la precisión de los números enteros a valores más altos que los ints; los flotantes se pueden usar para valores enteros de hasta 2 ^ 53 + 1, significativamente más altos que los 2 ^ 31 - 1 de los ints. En compilaciones de 64 bits, esto se invierte porque los flotantes tienen la misma precisión, pero los ints ahora están hasta 2 ^ 63 - 1.
thomasrutter
21

El tamaño de las entradas PHP depende de la plataforma :

El tamaño de un número entero depende de la plataforma, aunque un valor máximo de aproximadamente dos mil millones es el valor habitual (es decir, 32 bits con signo). PHP no admite enteros sin signo. El tamaño entero se puede determinar usando la constante PHP_INT_SIZE y el valor máximo usando la constante PHP_INT_MAX desde PHP 4.4.0 y PHP 5.0.5.

PHP 6 agrega "longs" (entradas de 64 bits).

cletus
fuente
2
No recibo estos votos negativos ... esta es una respuesta perfectamente buena, incluso con información adicional. +1 para corregirla.
nickf
3
Esta respuesta leyó originalmente "plataforma en dependiente" (no dependiente). También (todavía) afirma que las entradas de 64 bits no existían antes de PHP 6. Esto es falso.
thomasrutter
Sin embargo, PHP 6 nunca sucedió, por lo que es algo irrelevante.
BadHorsie
16

(un poco tarde, pero podría ser útil)

Solo confíe en PHP_INT_MAX y PHP_INT_SIZE , este valor varía en su arco (32/64 bits) y su sistema operativo ...

Cualquier otra "suposición" o "pista" puede ser falsa.

Julien CROUZET
fuente
6

Ah, lo encontré: 2 32 - 1 (2147483647)

http://au2.php.net/int

Desbordamiento de enteros

Si PHP encuentra un número más allá de los límites del tipo entero, se interpretará como un flotante. Además, una operación que da como resultado un número más allá de los límites del tipo entero devolverá un flotante en su lugar.

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

$large_number =  2147483648;
var_dump($large_number);
// output: float(2147483648)
nickf
fuente
8
Esto es lo que sería en una plataforma de 32 bits. Tenga en cuenta también que muchas personas ejecutan servidores en una plataforma de 64 bits.
thomasrutter
2

Depende de su sistema operativo, pero 2147483647 es el valor habitual, según el manual .

NullUserException
fuente
6
Específicamente, depende de si está ejecutando en una plataforma de 32 bits o de 64 bits. 32 bits es sólo "habitual" en un mundo en el que la mayoría de la gente ejecuta servidores de 32 bits. Cada vez más, este no es el caso.
thomasrutter
0

Aunque las PHP_INT_*constantes existen durante mucho tiempo, los mismos valores MIN / MAX se pueden encontrar mediante programación desplazando a la izquierda hasta alcanzar el número negativo:

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

Está sujeto a la arquitectura del servidor en el que se ejecuta PHP. Para 64 bits,

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

snr
fuente