Qual è il valore massimo per un int in PHP?


117

Ignorando le librerie speciali che ti consentono di lavorare con numeri molto grandi, qual è il valore int più grande che puoi memorizzare in PHP?

Risposte:


124

Dal manuale PHP :

La dimensione di un numero intero dipende dalla piattaforma, sebbene un valore massimo di circa due miliardi sia il valore usuale (ovvero 32 bit con segno). PHP non supporta interi senza segno. La dimensione intera può essere determinata utilizzando la costante PHP_INT_SIZE e il valore massimo utilizzando la costante PHP_INT_MAX a partire da PHP 4.4.0 e PHP 5.0.5.

Le piattaforme a 64 bit di solito hanno un valore massimo di circa 9E18, tranne su Windows precedenti a PHP 7, dove era sempre a 32 bit.


15
Bene, su amd64 linux, che è abbastanza comune al giorno d'oggi, è 9223372036854775807 (2 ^ 63-1)
derobert

4
Sono molte cifre: c'è la prima ragione per cui riesco a pensare di scegliere AMD rispetto a Intel quando acquisti un server dedicato. :)
karim79

39
@ karim79, penso che sia dovuto al fatto che l'arco è a 64 bit, non è AMD. =]
strager

7
AMD64 è un nome dell'architettura a 64 bit utilizzata da AMD e Intel in questi giorni. Altri nomi per esso includono x64 e Intel 64. Come dice strager, niente a che fare con il fatto che sia AMD
thomasrutter

4
Il mio Windows XAMPP echo 2147483647. Ho avuto AMD Athlon X2
Vova Popov

86

Build a 32 bit di PHP:

  • I numeri interi possono provenire da compresi -2.147.483.648 e 2.147.483.647 (~ ± 2 miliardi)

Build a 64 bit di PHP:

  • I numeri interi possono essere compresi tra -9.223.372.036.854.775.808 e 9.223.372.036.854.775.807 (~ ± 9 quintilioni)

I numeri sono inclusivi.

Nota: alcune build a 64 bit una volta utilizzavano interi a 32 bit, in particolare le versioni precedenti di Windows di PHP

I valori al di fuori di questi intervalli sono rappresentati da valori in virgola mobile, così come i valori non interi all'interno di questi intervalli. L'interprete determinerà automaticamente quando questo passaggio alla virgola mobile deve avvenire in base al fatto che il valore del risultato di un calcolo non possa essere rappresentato come un numero intero.

PHP non supporta gli interi "senza segno" in quanto tali, limitando il valore massimo di tutti gli interi all'intervallo di un intero "con segno".


1
È interessante notare che nelle build a 32 bit i float possono mantenere la precisione dei numeri interi a valori più alti rispetto agli int - i float possono essere usati per i valori interi fino a 2 ^ 53 + 1, significativamente più alti del 2 ^ 31 - 1 degli int. Nelle build a 64 bit questo è invertito perché i float hanno la stessa precisione ma gli int sono ora fino a 2 ^
63-1.

21

La dimensione degli int PHP dipende dalla piattaforma :

La dimensione di un numero intero dipende dalla piattaforma, sebbene un valore massimo di circa due miliardi sia il valore usuale (ovvero 32 bit con segno). PHP non supporta interi senza segno. La dimensione intera può essere determinata utilizzando la costante PHP_INT_SIZE e il valore massimo utilizzando la costante PHP_INT_MAX a partire da PHP 4.4.0 e PHP 5.0.5.

PHP 6 aggiunge "long" (int a 64 bit).


2
non ottengo questi voti negativi .. questa è una risposta perfettamente buona, anche con alcune informazioni extra inserite. +1 per correggerla.
nickf

3
Questa risposta originariamente leggere "piattaforma a dipendente" (non dipendente). Inoltre afferma (ancora) che gli int a 64 bit non esistevano prima di PHP 6. Questo è falso.
thomasrutter

PHP 6 non è mai successo, quindi è un po 'irrilevante.
BadHorsie

16

(un po 'in ritardo, ma potrebbe essere utile)

Fidati solo di PHP_INT_MAX e PHP_INT_SIZE , questo valore varia sul tuo arco (32/64 bit) e sul tuo sistema operativo ...

Qualsiasi altra "ipotesi" o "suggerimento" può essere falsa.


6

Ah l'ho trovato: 2 32 - 1 (2147483647)

http://au2.php.net/int

Overflow di numeri interi

Se PHP incontra un numero oltre i limiti del tipo intero, verrà invece interpretato come un float. Inoltre, un'operazione che restituisce un numero oltre i limiti del tipo intero restituirà invece un float.

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

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

8
Questo è quello che sarebbe su una piattaforma a 32 bit. Considera anche che molte persone eseguono server su una piattaforma a 64 bit.
thomasrutter

2

Dipende dal tuo sistema operativo, ma 2147483647 è il valore normale, secondo il manuale .


6
In particolare, dipende se si esegue su una piattaforma a 32 bit o 64 bit. 32 bit è solo "normale" in un mondo in cui la maggior parte delle persone esegue server a 32 bit. Questo non sta diventando sempre più il caso.
thomasrutter

0

Sebbene le PHP_INT_*costanti esistano per un tempo molto lungo, gli stessi valori MIN / MAX possono essere trovati a livello di programmazione spostando a sinistra fino a raggiungere il numero negativo:

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

0

È soggetto all'architettura del server su cui gira PHP. Per 64 bit,

print PHP_INT_MIN . ", ” . PHP_INT_MAX; i rendimenti -9223372036854775808, 9223372036854775807

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.