在我这样做时使用Javascript
var num = 1;
~ num == -2
为什么~num不等于0
二进制1中的存储为1 ...因此不应该是0
或者它像0001一样存储,因此不是0001将是1110
我想我错过了一些东西......有人可以解决这个问题吗
答案 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)
按位注意任何数字x的产量 - (x + 1)。例如,~5产生-6。
答案 3 :(得分:1)
这样做的原因是使用按位NOT会反转值的所有位。如果要将值1存储在带符号的8位整数中,则存储二进制值00000001.如果应用按位NOT,则得到11111110,对于带符号的8位整数,它是二进制值 - 2。