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

时间:2010-12-06 14:37:41

标签: php 32bit-64bit gmp

我找到了一些解决方案Efficient way of doing 64 bit rotate using 32 bit values,但它不在PHP中。

最大的问题是我从远程服务器大整数9223372036854775808(10)获得hexadecimal 8000000000000000(16)

没有机会在生产服务器上启用php_gmp (extension),但我必须检查接收值中的选定位。生产和开发服务器都是32bits machines

1 个答案:

答案 0 :(得分:1)

您可以使用BC Math(任意精度数学)完成此任务:

BC Math允许您对数字执行数学运算。使用算术运算符和使用BC Maths之间的区别在于,不是将数字存储为整数或浮点数,BC Math会将数字作为字符串返回。

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

PHP必须使用BC Math编译;但大多数PHP安装都应该有这个。

不幸的是,您无法对字符串执行按位操作,并且BC Math没有任何内置的按位函数。然而;在做了一些谷歌搜索之后,我发现了以下代码示例,我在下面复制并粘贴了它:

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)) ."\n";
echo bitSet(48, bitValue(48)) ."\n";
echo bitSet(47, bitValue(48)) ."\n";

(致hernst42的信用)

相关问题