为什么左移在PHP和Javascript之间是不同的



In Javascript

p = 105874240;
105874240
p << 5;
-906991616

但在 PHP 中

php > echo $p = 105874240;
105874240
php > echo $p << 5;
3387975680

我搜索了一些关于不同的介绍,因为Javascript使用签名的int32。但是我找不到正确的解决方案,一切都不适合我。

你能告诉我发生了什么,以及我如何在PHP中获得Javascript的相同结果。谢谢。

这就是我的做法。

function to32bits($value)
{
    $value = ($value & 0xffffffff);
    if ($value & 0x80000000) $value = -((~$value & 0xffffffff) + 1);
    return $value;
}
$p = 105874240;
echo to32bits($p << 5); // -906991616

最新更新