JavaScript中的否定

时间:2014-01-09 22:45:04

标签: javascript negation

有人可以解释为什么Javascript会给出以下结果吗?

~3 = -4
~3.346346 = -4
~-3 = 2

2 个答案:

答案 0 :(得分:3)

~ bitwise negation operator[MDN]

二进制的

3(使用32位整数)是

0000 0000 0000 0000 0000 0000 0000 0011 (3)
二进制中的

-3(使用two's complement)是

1111 1111 1111 1111 1111 1111 1111 1101 (-3)

~运算符将所有1转换为0,将0转换为1,因此~3将是

1111 1111 1111 1111 1111 1111 1111 1100 (~3 == -4)

-4的二进制文件(使用two's complement)。

同样,~-3将是

0000 0000 0000 0000 0000 0000 0000 0010 (~-3 == 2)

2的二进制文件。

执行按位运算时,

3.346346将被强制转换为整数,因此它与3具有相同的结果。


总结一下:

  3 = 0000 0000 0000 0000 0000 0000 0011 = (int)3.346346
 ~3 = 1111 1111 1111 1111 1111 1111 1100 = -4
 -3 = 1111 1111 1111 1111 1111 1111 1101
~-3 = 0000 0000 0000 0000 0000 0000 0010 =  2

答案 1 :(得分:0)

这是因为负数存储为二的补码

minusB = ~B + 1;

在您的情况下,撤消上面的公式:

  • -3存储为~3 + 1。因此,~-3相当于-(-3) - 1 = 2
  • ~3.346346首先四舍五入为3,然后~3可以读为-3 - 1 = -4

使用二进制补码的原因(而不是使用单独的符号位),无论符号如何,它都会使减法和加法变得微不足道。