PHP интерпретирует числа как числа с плавающей точкой, даже если они меньше INT_MAX - PullRequest
0 голосов
/ 26 ноября 2018

PHP документация здесь гласит, что:

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

Но как насчет операции, результатом которой является число, меньшее PHP_INT_MAX?

Посмотрите этот фрагмент кода в качестве примера:

$max_int = 2**31-1 ; //  2147483647
var_dump(PHP_INT_MAX === $max_int); // false

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

var_dump(PHP_INT_MAX === (int) $max_int) // true

Мои вопросы:

Переводит ли PHP-интерпретатор результат в float перед выполнением каких-либо вычислений?

Разве PHP не должен вычислять результат и затем устанавливаеттип соответственно?(Имеет смысл, верно?)

Редактировать:

Версия PHP: 7.2.1 32-разрядная

ОС: Windows: 10 x64

Я использую XAMPP

1 Ответ

0 голосов
/ 26 ноября 2018

При расчете $max_int = 2**31-1 двигатель делает это поэтапно:

$tmp = 2**31;
$max_int = $tmp-1

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

...