【发布时间】:2022-01-14 12:28:49
【问题描述】:
使用 JavaScript 的 BigInt 时如何打印无符号整数?
BigInts 可以使用toString(2) 打印为二进制表示。然而对于负值,这个函数只是在打印时附加一个- 符号。
BigInt(42).toString(2)
// output => 101010
BigInt(-42).toString(2)
// output => -101010
如何打印BigInt(42) 的无符号表示?我认为使用常规的numbers 你可以做(-42 >>> 0).toString(2),但是BigInt 似乎没有实现无符号右移,导致错误
(BigInt(-42) >>> BigInt(0)).toString(2)
// TypeError: BigInts have no unsigned right shift, use >> instead
【问题讨论】:
-
要解决 TypeError,您还需要将 0 包装在 BigInt 中。但是 BigInt 没有无符号右移,因为 BigInt 没有确定的长度。
-
对,对不起,但这给出了另一个错误消息。我已经更新了我的答案。
-
由于负 BigInts 表示为无限长的二进制补码,因此您无法将它们转换为二进制 - 您需要将它们转换为固定长度的值(如数字)或编写将转换它们的自定义函数基于当前长度。
-
明白这似乎是合乎逻辑的。所以我知道我的数字总是 64 位无符号整数,那我该怎么做呢?
-
由于 JS 数字是 64 位双精度数,您可能需要编写一个自定义类来基于 BigInt 来处理它。您还可以编写一个函数,将 BigInt 数转换为二进制表示,将每个 BigInt 视为 64 位值。
标签: javascript bit-manipulation bit-shift bigint