3

我找到了一些使用 32 位值进行 64 位旋转的有效方法,但它不在 PHP 中。

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

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

4

1 回答 1

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)

于 2012-07-06T16:22:59.047 回答