Я получаю некоторые странные результаты, когда 2 идентичные функции (одна в PHP и одна в javascript) возвращают разные результаты.
Ввод для обеих этих строк кода идентичен:
a = 4653896912;
b = 13;
Я дважды проверил типы переменных, и обе переменные являются числами в JS и целыми числами в PHP.
Строка кода для PHP выглядит так:
$a = $a >> $b;
Для Javascript это так:
a = a >> b;
Вы ожидаете, что a будет иметь одинаковое значение после обоих, но я получаю следующее:
PHP: $a = 568102
JS: a = 43814
Что полностью смутило меня в этот момент.
Оказывается, это определенно проблема PHP, использующего 64-битные целые числа, а JS - только 32-битные. Проблема, с которой я сталкиваюсь сейчас, заключается в том, что мне нужно заставить PHP использовать 32-битные целые числа для этих вычислений. Я нашел функцию, написанную кем-то другим, которая выглядит так, как будто она должна работать, но она, похоже, не меняет вывод для меня.
private static function toInt32(&$x) {
$z = hexdec(80000000);
$y = (int) $x;
if($y ==- $z && $x <- $z){
$y = (int) ((-1) * $x);
$y = (-1) * $y;
}
$x = $y;
}