这两天公司内部出了几道 ctf 的挑战题,里面有个题的内容是对一个超过32位的大整数求超次方幂,最后再对一个大整数求模。

这个其实是个算法问题,一开始用 Python 解的,因为 Python 的整数没有位数限制,所以直接上快速幂再结合求模运算很快就可以解出来。

做出来后我想起来 JS 最近支持了 BigInt,就想着用 BigInt 解一下,用完以后发现有不少要注意的 case:
1.bigint 不能和 number 混用,也就是说 123n + 456 会报错,个人觉得是好事,谁写 JS 没有被隐式类型转换坑过呢
2.Math 对象上的所有方法都不能用,入参只能是 Number,这就导致我得从零模拟一套 Math 开箱即用的方法
3.不支持无符号右移(>>>),而且做有符号右移的时候,移动的位数也必须是 BigInt,也就是说只能用 123n >> 1n,123n >> 1 会报错,这个个人感觉有些怪,但是还是可以理解,如果移动位数超过 32 就有新问题了

上面只是自己使用的一些小感悟,不知道大家在实际项目中使用 BigInt 时有什么感受,我们可以探索交流一下😁
展开
评论