gpt4 book ai didi

Javascript 十进制转二进制 - 64 位

转载 作者:数据小太阳 更新时间:2023-10-29 05:45:45 28 4
gpt4 key购买 nike

十进制-805306368的二进制是:

11111111111111111111111111111111 11010000000000000000000000000000

但是,在 Javascript 中我得到了 following :

var str = parseInt(-805306368).toString(2);
document.write(str);
-110000000000000000000000000000

任何人都可以解释如何从这个十进制解析 64 位二进制字符串吗?

最佳答案

JavaScript 不使用补码表示,它使用字符串前面的连字符- 来表示负数。那是因为二进制补码表示需要知道位的长度。当将具有一定位数的二进制补码数转换为具有更多位数的二进制数时(例如,当从一个字节变量复制到一个双字节变量时),必须在所有额外位中重复最高有效位.

要获得预期的结果,您可以反转每一位,但它不会提供我们想要的结果:

>>> (~-805306368).toString(2)
"101111111111111111111111111111"

然而,JavaScript 对 32 位整数执行所有二进制运算,因此这不适用于更大(或更小)的数字,至少会非常困惑。因此,您需要实现自己的格式化算法。

// example of 32-bit-conversion:
>>> (~parseInt("1111111111111111111111111111111",2)).toString(2)
"-10000000000000000000000000000000"
>>> (~parseInt("11111111111111111111111111111111",2)).toString(2)
"0"

我的实现:

function get64binary(int) {
if (int >= 0)
return int
.toString(2)
.padStart(64, "0");
else
return (-int - 1)
.toString(2)
.replace(/[01]/g, d => +!+d) // hehe: inverts each char
.padStart(64, "1");
}

console.log(get64binary(805306368))
console.log(get64binary(-805306368))

关于Javascript 十进制转二进制 - 64 位,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10936600/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com