我目前正在学习 JavaScript,我很惊讶没有内置的方法来处理二进制数。我必须使用高达 2^4096 的整数,所以我不能将 JS 整数用于我的微积分。
我的第一个想法是使用 1 和 0 的数组。但这并不令人满意,因为简单的乘以 2 需要移动整个表。
那么如何在 JavaScript 中有效地处理二进制数呢?
我不想使用任何库。我感兴趣的是它是如何工作的,而不是使用其他的抽象。
我目前正在学习 JavaScript,我很惊讶没有内置的方法来处理二进制数。我必须使用高达 2^4096 的整数,所以我不能将 JS 整数用于我的微积分。
我的第一个想法是使用 1 和 0 的数组。但这并不令人满意,因为简单的乘以 2 需要移动整个表。
那么如何在 JavaScript 中有效地处理二进制数呢?
我不想使用任何库。我感兴趣的是它是如何工作的,而不是使用其他的抽象。
Javascript 没有任何 biginteger 类型,因此您需要使用数组来保存这么多信息。
一个 0 和 1 值的数组可以很容易地为它实现功能,但效率不高。
Javascript 中的常规数字是双精度浮点数,因此它可以保存 52 位的数字信息(ref),但您可以使用稍微少一点的值来避免任何舍入错误,例如 48 位。
Javascript 中的位运算符使用 32 位整数,即当与位运算符一起使用时,双精度数转换为 32 位整数。如果要对数据使用按位运算符,可以选择在数组中每个项目存储 32 位。
JavaScript 仅支持 53 位整数。
存储“大整数”的最佳方法是将它们转换为服务器端的字符串。如果您想操作它们,我建议您查看此库https://github.com/rauschma/strint