为什么 !(~true) 不是 true?

3
在javascript中,波浪号运算符是按位非或补码,那么为什么下面的代码不能按预期运行呢?
var x = true;
var tildeX = ~x;
var exclX = !x;


tildeX == exclX; // returns false
3个回答

9
原因是因为true等同于1,当对数字1执行按位非(~)操作时,会得到-2。这与非(!)运算符结合后将产生false(因为与非运算符结合产生true的唯一数字是0)。这里有一些你可能会感兴趣的信息
引用自链接:

对任何数字x执行按位非操作都会产生-(x + 1)


1

~是按位操作符:

~(true) = ~1 = 0b11111110(用8位字符表示)

!是布尔取反操作符:

!(true) = !1 = 0b00000000


0

x 不是布尔类型,因此具有许多前导位设置为零。

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

另一方面,!x 是零。

这就是为什么 tildeX == exclX 比较为假。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接