Javascript 为什么呢!(~true)不是真的吗?
在javascript中,tilde运算符是按位NOT或补码,那么为什么下面的语句不能按预期工作呢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。因此,它将是非零的 !另一方面,
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)