Какое максимальное значение для int в PHP?

117

Не обращая внимания на специальные библиотеки, которые позволяют работать с очень большими числами, какое наибольшее значение int вы можете сохранить в PHP?

nickf
источник

Ответы:

124

Из руководства PHP :

Размер целого числа зависит от платформы, хотя максимальное значение около двух миллиардов является обычным значением (это 32 бита со знаком). PHP не поддерживает целые числа без знака. Целочисленный размер можно определить с помощью константы PHP_INT_SIZE, а максимальное значение - с помощью константы PHP_INT_MAX, начиная с PHP 4.4.0 и PHP 5.0.5.

64-битные платформы обычно имеют максимальное значение около 9E18, за исключением Windows до PHP 7, где оно всегда было 32-битным.

karim79
источник
15
Ну, на amd64 linux, который в наши дни довольно распространен, его 9223372036854775807 (2 ^ 63-1)
derobert
4
Это много цифр - это первая причина, по которой я могу когда-либо выбирать AMD, а не Intel при покупке выделенного сервера. :)
karim79
39
@ karim79, я думаю это из-за того, что арка 64-битная, а не AMD. =]
strager
7
AMD64 - это одно из названий 64-битной архитектуры, используемой в наши дни как AMD, так и Intel. Другие названия для него включают x64 и Intel 64. Как говорит Стрейджер, AMD не при чем,
thomasrutter
4
Мои окна XAMPP echo 2147483647. У меня был AMD Athlon X2
Вова Попов
86

32-битные сборки PHP:

  • Целые числа могут быть от -2 147 483 648 до 2 147 483 647 (~ ± 2 миллиарда).

64-битные сборки PHP:

  • Целые числа могут быть от -9,223,372,036,854,775,808 до 9,223,372,036,854,775,807 (~ ± 9 квинтиллионов)

Цифры указаны включительно.

Примечание: некоторые 64-разрядные сборки когда-то использовали 32-разрядные целые числа, особенно старые сборки PHP для Windows.

Значения вне этих диапазонов представлены значениями с плавающей запятой, как и нецелые значения в этих диапазонах. Интерпретатор автоматически определит, когда должно произойти переключение на плавающую точку, в зависимости от того, не может ли результирующее значение вычисления быть представлено как целое число.

PHP не поддерживает «беззнаковые» целые числа как таковые, ограничивая максимальное значение всех целых чисел диапазоном «подписанных» целых чисел.

thomasrutter
источник
1
Интересно, что в 32-битных сборках числа с плавающей запятой могут сохранять целочисленную точность до более высоких значений, чем целые числа - числа с плавающей запятой можно использовать для целых значений до 2 ^ 53 + 1, что значительно выше, чем 2 ^ 31-1 целых чисел. В 64-битных сборках это наоборот, потому что числа с плавающей запятой имеют ту же точность, но целые числа теперь составляют до 2 ^
63-1.
21

Размер ints PHP зависит от платформы :

Размер целого числа зависит от платформы, хотя максимальное значение около двух миллиардов является обычным значением (это 32 бита со знаком). PHP не поддерживает целые числа без знака. Целочисленный размер можно определить с помощью константы PHP_INT_SIZE, а максимальное значение - с помощью константы PHP_INT_MAX, начиная с PHP 4.4.0 и PHP 5.0.5.

PHP 6 добавляет "длинные" (64-битные целые числа).

Клетус
источник
2
я не получаю этих отрицательных голосов ... это совершенно хороший ответ, даже с добавлением некоторой дополнительной информации. +1, чтобы исправить это.
nickf
3
Этот ответ первоначально читать «платформу в зависимом» (не зависит). Он также (по-прежнему) утверждает, что 64-битные целые числа не существовали до PHP 6. Это неверно.
thomasrutter 06
Однако PHP 6 так и не появился, так что это не имеет значения.
BadHorsie,
6

А вот нашел: 2 32 - 1 (2147483647)

http://au2.php.net/int

Целочисленное переполнение

Если PHP встречает число за пределами целочисленного типа, оно будет интерпретировано как число с плавающей запятой. Кроме того, операция, результатом которой является число, выходящее за пределы целочисленного типа, вместо этого вернет число с плавающей запятой.

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

$large_number =  2147483648;
var_dump($large_number);
// output: float(2147483648)
nickf
источник
8
Вот что было бы на 32-битной платформе. Учтите также, что многие люди запускают серверы на 64-битной платформе.
thomasrutter
2

Это зависит от вашей ОС, но 2147483647 - обычное значение, согласно руководству .

NullUserException
источник
6
В частности, это зависит от того, работаете ли вы на 32-битной платформе или 64-битной. 32-разрядная версия - это «обычное дело» в мире, где большинство людей используют 32-разрядные серверы. Все чаще это становится не так.
thomasrutter
0

Хотя PHP_INT_*константы существуют очень давно, те же значения MIN / MAX можно найти программно, сдвигая влево до достижения отрицательного числа:

$x = 1;
while ($x > 0 && $x <<= 1);
echo "MIN: ", $x;
echo PHP_EOL;
echo "MAX: ", ~$x;
Revo
источник
0

Это зависит от архитектуры сервера, на котором работает PHP. Для 64-битной версии

print PHP_INT_MIN . ", ” . PHP_INT_MAX; доходность -9223372036854775808, 9223372036854775807

ОСШ
источник