Javascript 为什么呢!(~true)不是真的吗?

Javascript 为什么呢!(~true)不是真的吗?,javascript,boolean-logic,Javascript,Boolean Logic,在javascript中,tilde运算符是按位NOT或补码,那么为什么下面的语句不能按预期工作呢 var x = true; var tildeX = ~x; var exclX = !x; tildeX == exclX; // returns false ~是一种按位操作: ~(true)=~1=0b11111110(带8位字符) !!是布尔否定: !!(对)=!1=0b00000000x不是布尔类型,因此前导位负载设置为零 ~x将所有前导位转换为1。因此,它将是非零的 !另一方面,

在javascript中,tilde运算符是按位NOT或补码,那么为什么下面的语句不能按预期工作呢

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


tildeX == exclX; // returns false

~是一种按位操作:

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

!!是布尔否定:


!!(对)=!1=0b00000000

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

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

!另一方面,x是零


这就是为什么
tildeX==exclX
比较为false的原因。

原因是
true
相当于
1
,当您对编号
1
执行位NOT(
~
)时,您会得到
-2
。当与NOT运算符组合时(
)将产生false(因为与NOT运算符组合时唯一产生true的数字是
0

引自链接:

按位记下任意数字x产生-(x+1)