Javascript十进制到二进制-64位

Javascript十进制到二进制-64位,javascript,binary,decimal,Javascript,Binary,Decimal,十进制-805306368的二进制为: 11111111111111111111111111111111 110100000000000000000000000000 然而,在Javascript中,我得到了: -110000000000000000000000 谁能解释一下如何从这个十进制数中解析64位二进制字符串吗?您可以再次使用parseInt()。它有一个可选的第二个参数,使您能够在试图解析的字符串中指定数字的基数(或基数) 例如:parseInt(“-11000000000000000

十进制-805306368的二进制为:

11111111111111111111111111111111 110100000000000000000000000000

然而,在Javascript中,我得到了:

-110000000000000000000000

谁能解释一下如何从这个十进制数中解析64位二进制字符串吗?

您可以再次使用
parseInt()
。它有一个可选的第二个参数,使您能够在试图解析的字符串中指定数字的基数(或基数)


例如:
parseInt(“-110000000000000000000000”,2)//gives-805306368

JavaScript不使用两个补码表示,它在字符串前面使用一个
-
字符。这是因为它不知道您的数字范围有多少位

要获得预期结果,您可以反转每个位:

>>> (~-805306368).toString(2)
"101111111111111111111111111111"
然而,javascript对32位整数执行所有二进制操作,因此这对较大(或较小)的数字不起作用,至少会非常混乱。因此,您需要实现自己的格式化算法

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

String.prototype.padleft = function(len, chr){...}

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

你的问题有点语义上的滑稽<以10为基数的代码>-805306368正是您得到的:以2为基数的代码>-110000000000000000000000。你要找的是二元互补表示法。谢谢你的澄清。是的,这正是我想要的。谢谢,我也意识到了这一点。我希望返回的是“110100000000000000000000”(前32位)好的,关于实现我自己的格式化算法的任何指针-或者我可以使用另一种语言的示例作为指导?很好,您的函数工作得很好。非常感谢您的帮助,如果嘉士伯能够回答的话:)
String.prototype.padleft = function(len, chr){...}

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