Risposte:
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.
Build a 32 bit di PHP:
Build a 64 bit di PHP:
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".
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).
(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.
Ah l'ho trovato: 2 32 - 1 (2147483647)
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)
Dipende dal tuo sistema operativo, ma 2147483647 è il valore normale, secondo il manuale .
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;