为什么!(〜真)不正确?

时间:2013-10-22 09:39:28

标签: javascript boolean-logic

在javascript中,代字号运算符是按位NOT或补码,为什么以下不能按预期工作?

var x = true;
var tildeX = ~x;
var exclX = !x;


tildeX == exclX; // returns false

3 个答案:

答案 0 :(得分:9)

原因是因为true等同于1,当您对数字~执行按位NOT(1)时,您会得到-2 。当与NOT运算符(!)结合使用时会产生错误(因为与NOT运算符组合时唯一会生成true的数字是0

Here is some information that you might find interesting

引用链接:

  

按位注意任何数字x的产量 - (x + 1)

答案 1 :(得分:1)

〜是一个按位操作:

〜(true)= ~1 = 0b11111110(8位字符)

!是布尔否定:

!(true)=!1 = 0b00000000

答案 2 :(得分:0)

x不是布尔类型,因此前导位的加载设置为零。

~x会将所有这些前导位转换为1。因此它将是非零的。

另一方面,

!x为零。

这就是tildeX == exclX比较错误的原因。