加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > PHP教程 > 正文

PHP按位左移32个空格问题,大数算术运算结果不好

发布时间:2020-12-13 22:00:30 所属栏目:PHP教程 来源:网络整理
导读:我有以下问题: 第一:我试图在一个大数字上做一个32位的按位左移,由于某种原因,这个数字总是按原样返回.例如: echo(51610398832); // echoes 516103988 因为将位移到左边的一个空格相当于乘以2,我尝试将数字乘以2 ^ 32,并且它起作用,它返回221664974979517
我有以下问题:

第一:我试图在一个大数字上做一个32位的按位左移,由于某种原因,这个数字总是按原样返回.例如:

echo(516103988<<32); // echoes 516103988

因为将位移到左边的一个空格相当于乘以2,我尝试将数字乘以2 ^ 32,并且它起作用,它返回2216649749795176448.

第二:我必须从上面的数字中添加9379:

printf('%0.0f',2216649749795176448 + 9379); // prints 2216649749795185920

应打印:2216649749795185827

解决方法

Php整数精度仅限于机器字大小(32,64).要使用任意精度整数,您必须将它们存储为字符串并使用 bc或gmp库:

echo bcmul('516103988',bcpow(2,32));  // 2216649749795176448

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读