我想查看二进制的正整数或负整数。

像这个问题,但对于JavaScript。

评论

a.toString(2)示例似乎不适用于-1

也可以从二进制转换为十进制:stackoverflow.com/questions/11103487/…

当我说“二进制”时,这可能有点含糊。我的意思是内部位字符串表示形式,它是2s的补码,因此正数将以2为底,前导0,(负数将不会用减号或符号幅度表示,而是用正等价的功能)

-1。这个问题令人难以置信。过于温和地提出“也许有点am昧”。如果您真正想要的是2s补码为什么没有出现在标题或问题正文中?或多或少的等效表达式都不像“内部位字符串表示形式”。从您的答案和对其他答案的评论中,我得出的结论是,您不在乎二进制,而是在乎2s补码。您批评的问题在我看来就像是在正确回答您的问题...不是那些不好的答案-您的问题是。

@dingalapadum好考虑一下。 (实际上)计算机有几种不同的方式表示正整数和负整数?有符号幅度法,有1s补码和2s补码。还有“一些自定义方法”。如果有人要显示一种方式,那么他们应该说明表示的名称。如果有人写“ -1101”,那不是二进制。 'cos减号不是二进制数字。如果有人会说1是“ 1”而-1是“ 11111”,那么区分这些的机械方式是什么。该系统的名称是什么。

#1 楼

 function dec2bin(dec){
    return (dec >>> 0).toString(2);
}

dec2bin(1);    // 1
dec2bin(-1);   // 11111111111111111111111111111111
dec2bin(256);  // 100000000
dec2bin(-256); // 11111111111111111111111100000000
 



您可以使用Number.toString(2)函数,但是在表示负数时会遇到一些问题。例如,(-1).toString(2)的输出是"-1"

要解决此问题,可以使用无符号右移按位运算符(>>>)将数字强制为无符号整数。

如果运行(-1 >>> 0).toString(2),您将向右移动数字0位,这不会更改数字本身,但将其表示为无符号整数。上面的代码将正确输出"11111111111111111111111111111111"

这个问题有进一步的解释。


-3 >>> 0(右移逻辑)将其参数强制为无符号整数,这就是为什么您将获得-3的32位二进制补码表示形式。


评论


这是解释

–fernandosavio
13年7月26日在14:44

已经有一段时间了,因为我尝试了javascript,但是在这里尝试了w3schools.com/js/tryit.asp?filename=tryjs_output_alert并带有