我对PHP左移功能的行为非常困惑。我在两台不同的机器上使用它(开发和托管),他们给了我不同的答案。我已经跟踪了这个计算:
(-3941404251) << 5;
在一台机器上我得到答案-1570884448;另一方面,我得到0.在两个系统上,PHP_INT_MAX = 2147483647.后者是一个32位系统,第一个是64位,虽然php作为一个32位进程运行,但仍然给出相同的答案。 / p>
我只能假设这是32位与64位的问题,但有没有简单的方法来获得所需的行为。如果有人能指出我的功能或其他什么,那就太好了。
谢谢!
答案 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功能答案的替代品,可能更好地支持。