像这个问题,但对于JavaScript。
#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并带有
评论
a.toString(2)示例似乎不适用于-1也可以从二进制转换为十进制:stackoverflow.com/questions/11103487/…
当我说“二进制”时,这可能有点含糊。我的意思是内部位字符串表示形式,它是2s的补码,因此正数将以2为底,前导0,(负数将不会用减号或符号幅度表示,而是用正等价的功能)
-1。这个问题令人难以置信。过于温和地提出“也许有点am昧”。如果您真正想要的是2s补码为什么没有出现在标题或问题正文中?或多或少的等效表达式都不像“内部位字符串表示形式”。从您的答案和对其他答案的评论中,我得出的结论是,您不在乎二进制,而是在乎2s补码。您批评的问题在我看来就像是在正确回答您的问题...不是那些不好的答案-您的问题是。
@dingalapadum好考虑一下。 (实际上)计算机有几种不同的方式表示正整数和负整数?有符号幅度法,有1s补码和2s补码。还有“一些自定义方法”。如果有人要显示一种方式,那么他们应该说明表示的名称。如果有人写“ -1101”,那不是二进制。 'cos减号不是二进制数字。如果有人会说1是“ 1”而-1是“ 11111”,那么区分这些的机械方式是什么。该系统的名称是什么。