在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的二进制值。