Open eyasliu opened 7 years ago
document: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators
~ 操作符,叫做 按位非,它的用途就是将q其操作数当做32位的比特序列进行反转。
~
所有的按位操作符都会将操作数转成补码形式的有符号32位整数,就是将不足32位的二进制,用0填充至32位,其中最左位是符号位,决定数字是正数还是负数。而且只会处理整数,如果操作数为浮点数,将会舍弃小数部分。如数字 5 的二进制为
101
转成补码形式的32位整数是
00000000000000000000000000000101
那对其反转比特位(~5)后,就是
(~5)
11111111111111111111111111111010
负数的二进制就是对其正数的比特位取反,所以结果得到的数字就是-6
经上述例子可以得到一个公式:
~x = -(x + 1)
并且是取整数,接下来讨论一下该操作付的妙用
我们使用indexOf时,如果有匹配项则返回匹配的位置,无匹配项返回 -1,判断一个元素是否存在可这样写
arr.indexOf(5) === -1
将-1代入公式得
~-1 = -(-1 + 1) = 0 // ~-1 = 0
所以可简写为
~arr.indexOf(5)
因为按位操作符只操作整数部分,非整数部分会被舍弃,可用于取整操作
~~2.5333 // 2
用两个按位非操作符,就可以取整了,相当于 parseInt()
parseInt()
由于按位操作符只能操作32位的整数,所以他能操作的最大数为 (2^32 - 1),如果大于这个数字,那么公式 -(x + 1) 不再适用
-(x + 1)
document: https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators/Bitwise_Operators
~
操作符,叫做 按位非,它的用途就是将q其操作数当做32位的比特序列进行反转。有符号 32 位整数
所有的按位操作符都会将操作数转成补码形式的有符号32位整数,就是将不足32位的二进制,用0填充至32位,其中最左位是符号位,决定数字是正数还是负数。而且只会处理整数,如果操作数为浮点数,将会舍弃小数部分。如数字 5 的二进制为
转成补码形式的32位整数是
那对其反转比特位
(~5)
后,就是负数的二进制就是对其正数的比特位取反,所以结果得到的数字就是-6
~ 按位非
经上述例子可以得到一个公式:
并且是取整数,接下来讨论一下该操作付的妙用
配合 indexOf
我们使用indexOf时,如果有匹配项则返回匹配的位置,无匹配项返回 -1,判断一个元素是否存在可这样写
将-1代入公式得
所以可简写为
取整
因为按位操作符只操作整数部分,非整数部分会被舍弃,可用于取整操作
用两个按位非操作符,就可以取整了,相当于
parseInt()
注意
由于按位操作符只能操作32位的整数,所以他能操作的最大数为 (2^32 - 1),如果大于这个数字,那么公式
-(x + 1)
不再适用