在javascript中,代字号运算符是按位NOT或补码,为什么以下不能按预期工作?
var x = true;
var tildeX = ~x;
var exclX = !x;
tildeX == exclX; // returns false
答案 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
比较错误的原因。