PHP乘法奇怪的整数溢出行为



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位整数或大文件支持。请参阅这篇文章,了解正在进行的改进这些构建的工作。

相关内容

  • 没有找到相关文章

最新更新