今天在一代码中到这样一句:
~~(Math.random() * 2e3)
其中的代码上用到了位运算符~(按位非),在平时的编程中很少用到位运算符,只是学习编程基础的时候看到过,也没多做了解,既然现在遇到了,就打算对这一运算符一探究竟。
其实上面那一段代码用可读性强的方式来写的话,如下面
parseInt(Math.random()*2e3)
那为什么使用~~能实现parseInt取整的效果呢?
《Javascript权威指南》里是这么说的:
位运算符"~"是一元运算符,位于一个整型参数之前,它将操作数的所有位取反。根据javascript中所带符号的整数的表示方法,对一个值使用"~",运算符相当于改变它的符号并减1。例如~0x0F
= 0xFFFFFFF0或-16。
请注意,上面的句子中提到的是所带符号的整数!那么也就是说~9.88只是取整数部分,也即是~9。
根据上面的描述,使用~相当于改变参数的符号并减1,那么也就是:
~9 => -9 - 1 => -10
然而,使用两个~,那么就是相当于boolean中的!!一样,只是!!返回的是布尔类型,~~返回的是原来的值,如果参数是小数的话,就相当于对该参数取整!
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。