发布于 1970-01-01 08:00
  • 3 个回答
    • 恭喜你掉到php的一个大坑了。

      如果给定的一个数超出了 integer 的范围,将会被解释为 float。同样如果执行的运算结果超出了 integer 范围,也会返回 float。

      就是这个问题导致了各种匪夷所思的问题。

      PHP 不支持无符号整数。

      引用php原文

      然而,你出现此问题是因为你两个系统的long型(php的int型在内核中均为long型)长度不一致(因为系统位数不一样)。
      所以,你如要想解决此问题,就必须手动处理int到uint。

      $flag=$int&0x80000000;
      //取出符号位,判断是否是负数,溢出int范围,但没溢出uint范围时,符号位为1,即为负数
      if($flag){
          $int ^= 0xffffffff;
          $int += 1;
      }
      

      BTW,最新的php7修正了此问题,但php中无法移位一个负数。

      2022-11-30 19:09 回答
    • 不知道这段代码是从何而来的,左右移负数的代码是由CPU完成运算的,所以这里完全依赖机器,与系统关系都不大,看看能不能修正这段代码,或者只能是使用其他方法来代替左右移负数了。

      2022-11-30 19:09 回答
    • 所以从 php7 开始,位移一个负数会直接报错...

      2022-11-30 19:09 回答
    撰写答案
    今天,你开发时遇到什么问题呢?
    立即提问
    PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
    Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有