如何处理 javascript 中的 256 位数字并对它们执行按位运算?

Posted

技术标签:

【中文标题】如何处理 javascript 中的 256 位数字并对它们执行按位运算?【英文标题】:How to deal with 256 bit numbers in javascript and perfom bitwise operations on them? 【发布时间】:2021-06-21 10:42:35 【问题描述】:

如何处理javascript中的256位数字并对其进行二元运算?

来自here 我已经读到了

JavaScript 将数字存储为 64 位浮点数,但所有 对 32 位二进制数执行按位运算。

在执行按位运算之前,JavaScript 会转换数字 到 32 位有符号整数。

按位运算后,将结果转换回来 到 64 位 JavaScript 数字。

我正在使用solidity,所以如果我可以在javascript中操作256位数字会很棒。我怎样才能做到这一点?

【问题讨论】:

使用 bigints - 位运算符也适用于它们。 biginit 是 256 位吗? Bigint 是任意位大小的。 【参考方案1】:

解决这个问题最简单的方法是使用 BigInts,它是任意大的整数。可以进行按位运算,但两个操作数都必须是 BigInts,例如:

const x = (12n ** 122n) & (13n ** 133n);

x; // 456858437811811283460933542382254067662103063706637216731032202770157889962434550961221416858884249781343525362849766767350670950400n

另一种方法是直接使用数字的字节并在每个字节上独立应用按位运算,但这种方式更复杂,您不能用简单的数字原语表示这些数字。但是如果您运行代码的平台不支持BigInt 原语,这是唯一的方法。

【讨论】:

我使用的是 angular,或者你所说的 platfrom 是什么意思? arbitrarily large integers 是什么意思?我google了arbitrary的意思,发现它是random的同义词。 @YulePale 任意大:尽可能大,没有数字太大。平台:BigInts 是 JS 比较新的特性,并不是每个平台都支持:caniuse.com/bigint 在处理 angular 等框架和 react 等库时,平台限制是否适用? 平台是指浏览器(旧浏览器不支持 BigInts)、节点或其他运行 javascript 的环境。

以上是关于如何处理 javascript 中的 256 位数字并对它们执行按位运算?的主要内容,如果未能解决你的问题,请参考以下文章

如何处理 XMLHttpRequest 下载文件中的 javascript? [复制]

JavaScript中的内存泄漏以及如何处理

如何处理 SIGSEGV,Segmentation fault。使用 Avx2 时

如何处理 JavaScript 或 jQuery 中的 CORS 错误?

如何处理JavaScript 中的货币值?

javascript中如何处理焦点事件