javascript按位运算符问题

时间:2011-08-31 18:29:15

标签: javascript bit-manipulation

在我这样做时使用Javascript

var num = 1;

~ num == -2

为什么~num不等于0

  二进制1中的

存储为1 ...因此不应该是0

     

或者它像0001一样存储,因此不是0001将是1110

     

我想我错过了一些东西......有人可以解决这个问题吗

4 个答案:

答案 0 :(得分:5)

查找Two's complement以查找已签名的二进制数

让我们假设一个javascript数字是8位宽(不是):

然后

1 = 0000 0001b

~1 = 1111 1110b

哪个是-2

的二进制表示
0000 0010b =  2
0000 0001b =  1
0000 0000b =  0
1111 1111b = -1
1111 1110b = -2

答案 1 :(得分:2)

~切换操作数的位,以便

00000001

变为

11111110

是-2

注意:在javascript中,数字是32位,但我缩短了它以说明这一点。

答案 2 :(得分:1)

来自documentation

  

按位注意任何数字x的产量 - (x + 1)。例如,~5产生-6。

答案 3 :(得分:1)

这样做的原因是使用按位NOT会反转值的所有位。如果要将值1存储在带符号的8位整数中,则存储二进制值00000001.如果应用按位NOT,则得到11111110,对于带符号的8位整数,它是二进制值 - 2。