php - PHP 中任意大整数的算术运算

标签 php integer

好的,考虑到 PHP 本身仅支持 32 位有符号整数,PHP 并不是处理任意大整数的最佳语言。不过,我想做的是创建一个类,该类可以表示任意大的二进制数,并且能够对其中的两个数执行简单的算术运算(加/减/乘/除)。

我的目标是处理 128 位整数。

我正在研究几种方法,也发现了它们存在的问题。非常感谢任何关于您会选择什么以及如何去做的输入或评论。

方法 #1: 创建一个 128 位整数类,在内部将其整数存储为四个 32 位整数。这种方法的唯一问题是,在处理两个操作数的各个 block 时,我不确定如何处理上溢/下溢问题。

方法 #2: 使用 bcmath 扩展,因为这看起来像是它旨在解决的问题。采用这种方法时我唯一担心的是 bcmath 扩展的比例设置,因为我的 128 位整数中不能有任何舍入错误;他们必须精确。我还担心最终能否将 bcmath 函数的结果转换为二进制字符串(稍后我需要将其放入某些 mcrypt 加密函数中)。

方法 #3:将数字存储为二进制字符串(可能是 LSB 在前)。从理论上讲,我应该能够以这种方式存储任意大小的整数。我所要做的就是编写四个基本算术函数来对两个二进制字符串执行加/减/乘/除并生成二进制字符串结果。这正是我需要移交给 mcrypt 的格式,所以这是一个额外的好处。这是我认为目前最有前途的方法,但我遇到的一个症结是 PHP 没有提供任何方法来操纵单个位(据我所知)。我相信我必须将它分解成字节大小的 block (没有双关语意),此时我关于处理方法 #1 中的溢出/下溢的问题适用。

最佳答案

PHP GMP extension为此会更好。作为额外的好处,您可以使用它进行十进制到二进制的转换,如下所示:

gmp_strval(gmp_init($n, 10), 2);

关于php - PHP 中任意大整数的算术运算,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37391/

相关文章:

php - 将 MD5 哈希表示为整数

PHP 订单搜索 - 在将项目添加到订单刷新页面时,如何应用旧的搜索查询?

php - 比较两个关联数组并用匹配的数组创建一个新数组,PHP

c - 输入整数(无限制)并找到最小的(C语言)

c - 使用 C 进行数字到字符串的映射

c++ - 在 C++ 中将 int 转换为字符串的最简单方法

关于如何重置类的 php 4 到 5 移植问题

php - PHP 中使用端口号和根文件夹重写 URL

php - 将标题 ('Content-Type: image/png' ) 放在任何地方

python - Python 分词器解析整数时的奇怪行为