php乘以奇怪的整数溢出行为

时间:2014-06-12 09:09:45

标签: java php integer-overflow

在scala(java)

scala> 8218553819005469347L * 31
res75: Long = -3479248642764172867

但是在php(5.5 / 64bit linux系统)中

<?php
echo (int)(8218553819005469347 * 31);

打印 -3479248642764177408

如何让php返回与java相同的结果。

2 个答案:

答案 0 :(得分:1)

function multiply31($num)  {
    return (int)(($num << 5) - $num);
}

multiply转为add似乎有效。

答案 1 :(得分:0)

这可能最好地解释它http://www.php.net//manual/en/language.types.integer.php

还要记住PHP还没有完全移植到64位,请参阅http://windows.php.net/侧边栏中的这个小注释

  

x86_64构建

     

用于Windows的PHP的x64版本应被视为 experimental ,并且尚未提供64位整数或大文件支持。请参阅此帖子以了解正在进行的改进这些构建的工作。