在javascript中,波浪号运算符是按位非或补码,那么为什么下面的代码不能按预期运行呢?
var x = true;
var tildeX = ~x;
var exclX = !x;
tildeX == exclX; // returns false
var x = true;
var tildeX = ~x;
var exclX = !x;
tildeX == exclX; // returns false
true
等同于1
,当对数字1
执行按位非(~
)操作时,会得到-2
。这与非(!
)运算符结合后将产生false(因为与非运算符结合产生true的唯一数字是0
)。这里有一些你可能会感兴趣的信息。对任何数字x执行按位非操作都会产生-(x + 1)
~是按位操作符:
~(true) = ~1 = 0b11111110(用8位字符表示)
!是布尔取反操作符:
!(true) = !1 = 0b00000000
x
不是布尔类型,因此具有许多前导位设置为零。
~x
将把所有这些前导位转换为 1
。因此它将是非零的。
另一方面,!x
是零。
这就是为什么 tildeX == exclX
比较为假。