在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发布后,它也帮助我更好地理解这一现象。
答案 0 :(得分:4)
Javascript中的按位运算符将数字视为32位。所以10是
00000000 00000000 00000000 00001010
当你反转它时,结果是:
11111111 11111111 11111111 11110101
如果被解释为32位有符号数字,那就是-11(如果你不明白为什么,请阅读Two's Complement上的维基百科条目)。