Javascript位运算符问题



在Javascript中,当我这样做

var num = 1;
~ num == -2

为什么~num不等于0

二进制1中的

存储为1…因此非1应该是0

或者以0001的形式存储,因此不是0001将是1110

我想我错过了什么…谁能帮我清理一下

查找有符号二进制数

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

然后

1 = 0000 0001b

~1 = 1111 1110b

-2

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

~切换操作数的位,因此

00000001

11111110

等于-2

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

来自文档:

按位表示任意数字x的值为-(x + 1)。例如,~5的值为-6。

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

最新更新