【发布时间】:2022-08-13 21:35:52
【问题描述】:
使用“正常”数字(32 位范围),我使用零填充右移运算符转换为二进制,它适用于正数和负数(导致二进制补码):
const numberToConvert = -100
(numberToConvert >>> 0).toString(2);
//Result is correct, in two\'s complement: \'11111111111111111111111110011100\'
但是,如何使用负 BigInt 来做到这一点? 如果我做:
(-1000000000000000000n >>> 0).toString(2)
我收到一个错误\"Uncaught TypeError: 不能混合 BigInt 和其他类型,使用显式转换\"
所以然后我尝试使用 0 作为 bigint:
(-1000000000000000000n >>> 0n).toString(2)
我收到以下错误:未捕获的 TypeError:BigInts 没有无符号右移,请改用 >>
这样做会产生非二进制补码二进制文件,并附有 \"-\":
(-1000000000000000000n >> 0n).toString(2)
//Result is:\'-110111100000101101101011001110100111011001000000000000000000\'
如何获得负 bigint 的二进制补码?
-
你不用说多少位吗?因为,你怎么知道有多少
1\'s 放在前面?您可能可以使用 100 或 200。例如,添加足够使其成为 128 位或 256 位
标签: javascript binary bigint