Javascript十进制到二进制 - 64位

时间:2012-06-07 17:13:01

标签: javascript binary decimal

十进制-805306368的二进制文件是:

11111111111111111111111111111111 11010000000000000000000000000000

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

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

-110000000000000000000000000000

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

2 个答案:

答案 0 :(得分:12)

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");
}

答案 1 :(得分:2)

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

例如:parseInt("-110000000000000000000000000000", 2) // gives -805306368