web-dev-qa-db-fra.com

Quelle est la valeur maximale pour un int en PHP?

En ignorant les bibliothèques spéciales qui vous permettent de travailler avec de très grands nombres, quelle est la plus grande valeur int que vous puissiez stocker en PHP?

104
nickf

Depuis le manuel PHP :

La taille d'un entier dépend de la plate-forme, bien qu'une valeur maximale d'environ deux milliards soit la valeur habituelle (c'est-à-dire 32 bits signés). PHP ne supporte pas les entiers non signés. La taille entière peut être déterminée à l'aide de la constante PHP_INT_SIZE et la valeur maximale à l'aide de la constante PHP_INT_MAX depuis PHP 4.4.0 et PHP 5.0.5.

Les plates-formes 64 bits ont généralement une valeur maximale d’environ 9E18, sauf sur Windows antérieure à PHP 7, où elle était toujours en 32 bits.

109
karim79

versions 32 bits de PHP:

  • Les nombres entiers peuvent être de - 2.147.483.648 à 2.147.483.647 (~ ± 2 milliards)

versions de PHP 64 bits:

  • Les nombres entiers peuvent être de - 9.223.372.036.854.775.808 à 9.223.372.036.854.775.807 (~ ± 9 quintillions)

Les chiffres sont inclus.

Remarque: certaines versions 64 bits utilisaient jadis des entiers 32 bits, en particulier les anciennes versions PHP de PHP

Les valeurs situées en dehors de ces plages sont représentées par des valeurs à virgule flottante, de même que les valeurs non entières comprises dans ces plages. L'interpréteur déterminera automatiquement quand ce basculement en virgule flottante doit avoir lieu en fonction du fait que la valeur de résultat d'un calcul ne peut pas être représentée sous la forme d'un entier.

PHP ne prend pas en charge les entiers "non signés" en tant que tels, limitant la valeur maximale de tous les entiers à la plage d'un entier "signé".

83
thomasrutter

La taille de PHP ints est dépend de la plate-forme :

La taille d'un entier dépend de la plate-forme, bien qu'une valeur maximale d'environ deux milliards soit la valeur habituelle (c'est-à-dire 32 bits signés). PHP ne supporte pas les entiers non signés. La taille entière peut être déterminée à l'aide de la constante PHP_INT_SIZE et la valeur maximale à l'aide de la constante PHP_INT_MAX depuis PHP 4.4.0 et PHP 5.0.5.

PHP 6 ajoute les "longs" (ints 64 bits).

20
cletus

(un peu en retard, mais pourrait être utile)

Seulement confiance PHP_INT_MAX et PHP_INT_SIZE , cette valeur varie sur votre Arch (32/64 bits) et votre système d'exploitation ...

Toute autre "devinette" ou "indice" peut être faux.

15
Julien CROUZET

Ah je l'ai trouvé: 232 - 1 (2147483647)

http://au2.php.net/int

Débordement d'entier

Si PHP rencontre un nombre au-delà des limites du type entier, il sera interprété à la place. Flotter à la place.

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

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

Cela dépend de votre système d'exploitation, mais 2147483647 est la valeur habituelle, selon le manuel .

2
user57365

Bien que PHP_INT_* _ les constantes existent depuis très longtemps, les mêmes valeurs MIN/MAX peuvent être trouvées par programmation en décalant vers la gauche jusqu'à atteindre le nombre négatif:

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

Il est soumis à l’architecture du serveur sur lequel PHP est exécuté. Pour les versions 64 bits,

print PHP_INT_MIN . ", ” . PHP_INT_MAX; _ donne -9223372036854775808, 9223372036854775807

0
snr