douti9286 2010-12-06 14:37
浏览 88
已采纳

在32位系统中使用64位整数的位操作(没有php_gpm扩展名)

I found some solution Efficient way of doing 64 bit rotate using 32 bit values but it's not in PHP.

The biggest problem is that I get from remote server big integer 9223372036854775808(10) as hexadecimal 8000000000000000(16).

There is no chance to enable php_gmp (extension) on production server but I have to check selected bits in received value. Both, production and development server are 32bits machines.

  • 写回答

1条回答 默认 最新

  • duanluanhui8348 2012-07-06 16:22
    关注

    You can accomplish this using BC Math (Arbitrary Precision Mathematics):

    BC Math allows you to perform mathematic operations on numbers. The difference between using arithmetic operators and using BC Maths is that instead of storing the number as an integer or a float, BC Math returns the number as string.

    http://php.net/manual/en/ref.bc.php

    PHP has to be compiled with BC Math; however most PHP installs should have this.

    Unfortunately you can't do bitwise operations on strings, and BC Math doesn't have any built-in bitwise functions. However; after doing a bit of Googling, I found the following code sample and I've copied and pasted it here below:

    function bitValue($no) { return bcpow(2, $no); }
    function bitSet($no, $value) {
        $tmp = bcmod($value, bitValue($no+1));
        return bccomp(bcsub($tmp, bitValue($no)), 0)>= 0;
    }
    
    echo bitSet(49, bitValue(48)) ."
    ";
    echo bitSet(48, bitValue(48)) ."
    ";
    echo bitSet(47, bitValue(48)) ."
    ";
    

    (Credits to hernst42)

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 有了解d3和topogram.js库的吗?有偿请教
  • ¥100 任意维数的K均值聚类
  • ¥15 stamps做sbas-insar,时序沉降图怎么画
  • ¥15 unity第一人称射击小游戏,有demo,在原脚本的基础上进行修改以达到要求
  • ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
  • ¥15 关于#Java#的问题,如何解决?
  • ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
  • ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
  • ¥15 cmd cl 0x000007b
  • ¥20 BAPI_PR_CHANGE how to add account assignment information for service line