在JS中有 ~ | & ^ << >> 等位运算符。
在对一个数值使用位运算符时,JS会先将数值转换为二进制,然后进行位运算。
在JS中对一个数值转进行二进制转换,会得到一个长度为32位的二进制数,通常第一个为1的位之前所有为0的为在表示时可以省略。
常见位运算符使用方法有下列几种:
~:非,~ a 即 将a的二进制码的每一位(32位)中的0和1互换得到新值。事实上,非位运算相当于对数值进行取负运算,再减 1。即 ~a=-(a+1)。如~1为-2,~-1为 0。
&:与 ,a & b 即 将a和b中ab都为1的位组成新值,如 1111 & 111100 值为 1100
| :或 ,a | b 即 将a和b中ab有为1的位组成新值,如 1010 | 100010 值为 101010
^ :异,a ^ b 即 将a和b中ab不同的位组成新值(即一个为0另一个为1,则为1,两个都为0或都为1,则为0),如 1010 ^ 111000 值为 110010
<<:左移,a << 2 即 将 a 前2位丢弃,后2位补0
>>:右移,a >> 4 即 将a 后4位丢弃,前4位补0
使用示例:
console.log(~-2);//1
console.log(~-1);//0
console.log(~0);//-1
console.log(~1);//-2
console.log(~2);//-3
//由于indexOf方法返回-1表示不包含指定元素,否则为包含,
//所以可以利用~可以把-1转换为0,否则为非0整数
var arr = ['a', 'b']
if(~arr.indexOf('a')){
console.log(true);
}
// true