首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在32位系统中对64位整数使用位操作(无php_gpm扩展)

在32位系统中对64位整数使用位操作(无php_gpm扩展)
EN

Stack Overflow用户
提问于 2010-12-06 22:37:41
回答 1查看 949关注 0票数 3

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

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

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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搜索之后,我找到了以下代码示例,并将其复制并粘贴到下面:

代码语言:javascript
复制
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)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4367469

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档