我找到了一些解决方案Efficient way of doing 64 bit rotate using 32 bit values,但它不是用PHP写的。
最大的问题是我从远程服务器得到了作为hexadecimal 8000000000000000(16)的大整数9223372036854775808(10)。
没有机会在生产服务器上启用php_gmp (extension),但我必须检查接收到的值中的选定位。生产服务器和开发服务器都是32bits machines。
发布于 2012-07-07 00:22:59
您可以使用BC Math (任意精度数学)来完成此操作:
BC Math允许你对数字进行数学运算。使用算术运算符和使用BC Math之间的区别在于,BC Math将数字作为字符串返回,而不是将数字存储为整数或浮点数。
http://php.net/manual/en/ref.bc.php
PHP必须使用BC Math进行编译;但是,大多数PHP安装都应该使用BC Math。
不幸的是,你不能对字符串进行按位操作,而且BC Math没有任何内置的按位函数。但是,在进行了一些Googling搜索之后,我找到了以下代码示例,并将其复制并粘贴到下面:
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)
https://stackoverflow.com/questions/4367469
复制相似问题