【问题标题】:php multiply strange integer overflow behaviorphp乘以奇怪的整数溢出行为
【发布时间】:2014-06-12 09:09:44
【问题描述】:

在 scala(java) 中

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

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

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

它打印 -3479248642764177408

如何让php返回和java一样的结果。

【问题讨论】:

  • 对不起,Java 和 Scala 可以互换吗?
  • @ChiefTwoPencils scala 和 java 在这里有相同的行为。
  • 答案:Java 程序员需要阅读 php Stuff 和 php 程序员需要阅读 Java Doc... :)
  • echo ((8218553819005469347 * 31) &gt; PHP_INT_MAX) ? -PHP_INT_MAX : (int)(8218553819005469347 * 31); 也许? (未经测试)
  • 那么以 JVM 为目标的 每一种 语言也会以相同的方式运行。您没有在帖子中包含这些语言或标签。关键是,它的编写方式可能有点混乱。

标签: java php integer-overflow


【解决方案1】:
function multiply31($num)  {
    return (int)(($num << 5) - $num);
}

multiply 变成add 似乎可行。

【讨论】:

    【解决方案2】:

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

    还记得 PHP 还没有完全移植到 64 位请看http://windows.php.net/侧边栏中的这个小说明

    x86_64 构建

    PHP 的 x64 版本应被视为实验性,尚不提供 64 位整数或大文件支持。请参阅这篇文章,了解正在进行的改进这些构建的工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2012-01-21
      • 2013-07-25
      • 2013-05-10
      • 2015-03-30
      • 2014-05-18
      • 1970-01-01
      • 2012-10-30
      相关资源
      最近更新 更多