JS:为什么~10(二进制,~1010)= -11(二进制,-1011)?

时间:2014-08-01 00:13:46

标签: javascript binary bitwise-operators signed twos-complement

在Javascript中,如果我对十进制整数10执行按位NOT运算:

~10

我希望它在二进制整数上按位计算NOT,如下所示:

~1010 = 0101

换句话说,我期望十进制整数5.相反,操作给了我-11。 (在你的控制台中试试)

~10 = -11

如果我通过将-11和~10看作二进制整数字符串来更明确地检查:

parseInt(~10,10).toString(2)
"-1011"

parseInt(-11,10).toString(2)
"-1011"

一致。但我不明白。任何人都可以向我解释原因吗?我猜这与标志有关。

编辑:I found this question发布后,它也帮助我更好地理解这一现象。

1 个答案:

答案 0 :(得分:4)

Javascript中的按位运算符将数字视为32位。所以10是

00000000 00000000 00000000 00001010

当你反转它时,结果是:

11111111 11111111 11111111 11110101

如果被解释为32位有符号数字,那就是-11(如果你不明白为什么,请阅读Two's Complement上的维基百科条目)。