In scala(java)
scala> 8218553819005469347L * 31
res75: Long = -3479248642764172867
但是在php(5.5/64位linux系统)
<?php
echo (int)(8218553819005469347 * 31);
打印-3479248642764177408
如何使php返回与java相同的结果
function multiply31($num) {
return (int)(($num << 5) - $num);
}
把multiply
变成add
似乎行得通。
这可能是最好的解释http://www.php.net//manual/en/language.types.integer.php
还要记住PHP还没有完全移植到64位,参见http://windows.php.net/
侧边栏中的这个小说明。x86_64构建
用于Windows的x64版本的PHP应该被认为是实验性的,并且还不提供64位整数或大文件支持。请参阅这篇文章,了解正在进行的改进这些构建的工作。