PHP Left Shift在两台不同的机器上给出两个答案

时间:2010-02-21 12:54:19

标签: php 64-bit 32-bit bit-manipulation bit-shift

我对PHP左移功能的行为非常困惑。我在两台不同的机器上使用它(开发和托管),他们给了我不同的答案。我已经跟踪了这个计算:

(-3941404251) << 5;

在一台机器上我得到答案-1570884448;另一方面,我得到0.在两个系统上,PHP_INT_MAX = 2147483647.后者是一个32位系统,第一个是64位,虽然php作为一个32位进程运行,但仍然给出相同的答案。 / p>

我只能假设这是32位与64位的问题,但有没有简单的方法来获得所需的行为。如果有人能指出我的功能或其他什么,那就太好了。

谢谢!

3 个答案:

答案 0 :(得分:2)

第一个值是您问题的正确答案。官方手册说,你不能在数字大于max_int时使用按位运算符。因此,请尝试使用GMP函数(例如http://www.php.net/manual/en/function.gmp-and.php)并将数字视为字符串。

答案 1 :(得分:1)

这些机器是否运行相同版本的PHP? (-3941404251)对于32位有符号值已经太大了,所以我怀疑“正确”结果是未定义的,不同的版本/编译/等给出不同的结果不会被视为错误。

答案 2 :(得分:1)

您可以使用BC Math函数来克服整数限制。它是elq的GMP功能答案的替代品,可能更好地支持。