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)

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

报告相同问题?

悬赏问题

  • ¥20 基于MSP430f5529的MPU6050驱动,求出欧拉角
  • ¥20 Java-Oj-桌布的计算
  • ¥15 powerbuilder中的datawindow数据整合到新的DataWindow
  • ¥20 有人知道这种图怎么画吗?
  • ¥15 pyqt6如何引用qrc文件加载里面的的资源
  • ¥15 安卓JNI项目使用lua上的问题
  • ¥20 RL+GNN解决人员排班问题时梯度消失
  • ¥60 要数控稳压电源测试数据
  • ¥15 能帮我写下这个编程吗
  • ¥15 ikuai客户端l2tp协议链接报终止15信号和无法将p.p.p6转换为我的l2tp线路