如何在 Javascript 中实现 Big Int?
How to implement Big Int in Javascript?
我正在从事开源项目。由于表示为 JavaScript 数字,即 let、const...我想添加对 Int、Long Int 和 Big Ints 的支持,类似于 c++。
任何人都可以建议任何资源或方法来实现这一目标吗?
谢谢
JavaScript 获得了 BigInt support as a feature a couple of years ago. By now, most users have browsers new enough to support it: https://caniuse.com/bigint.
如果您想支持甚至更旧的浏览器,有多种纯 JavaScript 实现,各有优缺点,例如 JSBI, MikeMcl's bignumber.js, Peter Olson's BigInteger.js, Yaffle's BigInteger。您可以研究它们的来源以了解它们是如何实现的。
为了了解本机 BigInt 的实现方式,this V8 blog post 提供了一些见解。
旁注:JavaScript 完全能够像 C++ int
/int32_t
一样表达 32 位整数,不需要 BigInts 或库。按位二进制运算导致 JavaScript 数字表现得像 32 位整数,因此您可以编写 (a + b) | 0
使加法表现得像 C++ int
加法。
如果您只需要 64 位整数,则将它们表示为成对的 32 位数字并不难。还有几个现有的库可以做到这一点(只需使用您最喜欢的搜索引擎)。如果您实际上不需要任意大的整数,那可能是一个不错的选择。
我正在从事开源项目。由于表示为 JavaScript 数字,即 let、const...我想添加对 Int、Long Int 和 Big Ints 的支持,类似于 c++。
任何人都可以建议任何资源或方法来实现这一目标吗?
谢谢
JavaScript 获得了 BigInt support as a feature a couple of years ago. By now, most users have browsers new enough to support it: https://caniuse.com/bigint.
如果您想支持甚至更旧的浏览器,有多种纯 JavaScript 实现,各有优缺点,例如 JSBI, MikeMcl's bignumber.js, Peter Olson's BigInteger.js, Yaffle's BigInteger。您可以研究它们的来源以了解它们是如何实现的。
为了了解本机 BigInt 的实现方式,this V8 blog post 提供了一些见解。
旁注:JavaScript 完全能够像 C++ int
/int32_t
一样表达 32 位整数,不需要 BigInts 或库。按位二进制运算导致 JavaScript 数字表现得像 32 位整数,因此您可以编写 (a + b) | 0
使加法表现得像 C++ int
加法。
如果您只需要 64 位整数,则将它们表示为成对的 32 位数字并不难。还有几个现有的库可以做到这一点(只需使用您最喜欢的搜索引擎)。如果您实际上不需要任意大的整数,那可能是一个不错的选择。