《javascript权威指南》里是这么说的:
位运算符"~"是一元运算符,位于一个整型参数之前,它将操作数的所有位取反。根据javascript中所带符号的整数的表示方法,对一个值使用"~",运算符相当于改变它的符号并减1。例如~0x0F = 0xFFFFFFF0或-16。
这是两个~符号:
~~5===5; //true
~~4.5===4.5 //false
~~-5===-5 //true
是不是可以推断出~~n===n,n为未知数字
当为一个~符号:
~5===-6; //true
~4.5===-4.5 //false
~4.5===-3 //true
~-5===-5 //false
~-5===4 //true
~-4.5===3 //true
是不是可以推断出~n===-parseInt(n)-1,n为未知数字
在 JS 里面,所有位操作符里面都先执行
ToInt32
,但是parseInt
并不会执行这一步。ES5.1 对
~
的描述(parseInt就不贴了太长,自己可以在下面的链接里找):http://www.ecma-international...
~
是按位非,在 JS 中常常连用,以简化 parseInt,就像这样~~something
。~
在运算的时候会把操作数转换为整型来运算,所以~4.5
实际是~4
。其实并不需要推断……
你自己都写明了:位运算符"~"是一元运算符,位于一个整型参数之前
js的所有数字其实都是按照64位浮点数储存的,当需要进行位运算时,会将其临时转换为整数,所以你会认为是
parseInt(n)
另,根据有符号整数负数补码的定义可知,
-x==~x+1
就是这样~