【JS基础】位运算符

JS 位运算符

1.简介

位运算是低级的运算操作,所以其速度往往也是相对较的。同时,借助位运算的特性还可以实现一些算法,恰当地使用位运算有很多好处。

注意:所有的位运算都是在二进制下进行运算的

2.位运算符

位运算符分为两种,位逻辑运算符位移运算符
【JS基础】位运算符_第1张图片【JS基础】位运算符_第2张图片
下面是位逻辑运算符的逻辑结果参照:
【JS基础】位运算符_第3张图片【JS基础】位运算符_第4张图片

3.位运算符的使用

3.1 取反 ~

语法:~a

其效果是将后面的值转为二进制,然后按位反转。

在实际开发中,其的使用往往涉及到数组:

// 根据某个条件,找到数组中符合条件的项的索引
const index = list.findIndex((item) => {
	item.xxx === yyy;
})
// 如果此时找到了,则直接使用index即可;但如果此时未找到指定项,应该如何判断?
// 若未找到,则index为-1,将其取反 ~index = 0;若找到了,则index为非负数,其取反后必为负数!
// 所以此时可以通过if判断index取反后的值来判断是否找到指定元素
if (~index) {
    ...
} else {
    ...
}

3.2 左移 <<

语法:a << b

其效果是,将a的各二进制位全部左移b位,高位丢弃、低位补0。

例:6 << 2 = 24

0000 0000 0000 0000 0000 0000 0000 0110     -> 6
0000 0000 0000 0000 0000 0000 0001 1000     -> 6 << 2 = 24

可以看到,其结果实际上可以理解为:6 * (2 ^ 2) = 24

因此,在实际使用中,左移运算符常常用来做a * (2 ^ b)的运算,因为其是直接通过二进制来进行运算,效率会更高!

3.3 右移 >>

语法:a >> b

其效果是,将a的各二进制位全部右移b位,低位丢弃,正数高位补0,负数高位补1。

例:12 >> 2 = 3

0000 0000 0000 0000 0000 0000 0000 1100     -> 12
0000 0000 0000 0000 0000 0000 0000 0011     -> 12 >> 2 = 3

-12 >> 2 = -3

1111 1111 1111 1111 1111 1111 1111 0100    -> -12
1111 1111 1111 1111 1111 1111 1111 1101    -> -12 >> 2 = -3

与左移类似,我们也可以将上面的例子理解为:12 / (2 ^ 2) = 3-12 / (2 ^ 2) = -3

因此,在实际使用中,右移运算符常常用来做a / (2 ^ b)的运算,同样地,效率会更高!

3.4 无符号右移 >>>

语法:a >>> b

其效果是,将a的各二进制位全部右移b位,低位丢弃,高位补0。

例:

12 >>> 2 = 3

0000 0000 0000 0000 0000 0000 0000 1100     -> 12
0000 0000 0000 0000 0000 0000 0000 0011     -> 12 >> 2 = 3

-12 >>> 2 = 1073741821

1111 1111 1111 1111 1111 1111 1111 0100    -> -12
0011 1111 1111 1111 1111 1111 1111 1101    -> -12 >> 2 = 1073741821

3.5 按位与 &

基本使用这里就不讨论了,这里补充几个按位与的特殊用法:

  1. 清零:将一个数和0进行按位与操作,结果为0
  2. 取一个数的指定位
  3. 判断一个数的奇偶性:a & 1 ,a 为奇数时结果为1,为偶数时结果为0

你可能感兴趣的:(JS基础,javascript,开发语言)