JS如何处理超过32位的整数的位运算

本文探讨了JavaScript中由于位运算规则导致的超过32位整数处理问题。通过举例说明,解释了由于JavaScript将所有数值存储为64位浮点数,但在位运算时转换为32位有符号整数所引发的困境。提出了分段处理的思想,即通过多次运算来模拟对大整数的位运算,但并未给出完整解决方案,指出需要根据最大长度动态拆分处理。
摘要由CSDN通过智能技术生成

这个问题是已经毕业的学员李佳问到的,本想在网上查一下给他个答案省事.转念一想,如果网上如果他能在网上查到看的明白的方案应该不至于来问我.索性自己给他解一解.因为貌似这个问题还是有点意思的.

首先,要知道为什么这个问题会成为一个问题.这里就不得不说说JS当中坑爹的位运算规则.

我们知道JS是一种弱类型的脚本语言,所有的数值无论是整数还是小数,其实都是按照64为位的浮点形式存储.然而当两个整数在进行位运算时,却又会自动转化为32位的有符号整数.这才导致了这个蛋疼的问题.

解决这个问题以前我们先来考虑这样一件事情,如果在你面前有一缸水,但是你只有一个32L的桶,现在你想取50L水,要怎样取. 跑两趟,对吗?两趟不行,三趟种可以吧.
计算机是为人类服务的,这种思路一定可以行的通.

比如现在有一个超级大的数,我们假定它是0xf ffff ffff,好了九个F够了,超过32位的就行.如果我们要拿着这个数跟0xf000 000f异或.我们希望得到的结果是0x f 0fff fff0对吗? 可是理想很丰满,现实却是残酷的,因为当你直接拿这两个数异或之后,发现结果是 0x 0fff fff0, 因为转化为32位的整数时,那个超标的数的高字节部分被截掉了,坑爹啊?

回顾我刚才讲到的分趟原理, 既然JS每次最多只能处理32位的位运算,那么能不能分段来处理呢?很肯定的告诉你,可以.

那么接下来的问题就是:
1,分几段,怎么分
2,分出来的数据如何处理
3,分段处理的数据如何整合

结合上面的数据来分析,0xf ffff ffff总有效的数据实际上只存在于后面的9个字节中,而JS的位运算最多可以处理4个字节的数据,只需要将一个字节抽离出来单独处理,剩下的部分作为另一段处理即可.

浏览器有问题,已保存就崩,直接丢代码了

var longN = 0xfffffff
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值