gpt4 book ai didi

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

转载 作者:可可西里 更新时间:2023-11-01 12:35:17 30 4
gpt4 key购买 nike

好的,考虑到 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/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com