js常用位运算

一:左移 << 和 无符号左移 <<<

对于无符号数或正数左移运算,无符号左移与有符号左移运算的结果是相同的。

1. << 相当于 left * (2 ^ right) 并向下取整

10 << 1 => 20
10.222 << 1 => 20
10.999 << 1 => 20

10 << 2 => 40

二:右移 >> 和 无符号右移 >>>

对于无符号数或正数右移运算,无符号右移与有符号右移运算的结果是相同的。

1.  >> 相当于 left / (2 ^ right) 并向下取整

10 >> 1 => 5
11 >> 1 => 5

10 >> 2 => 2

2. 数组通过indexOf()和splice()做查找删除时, 若indexOf()没有找到值则会返回-1,而splice()传-1则会将数组最后一个值删除,引发bug,故利用>>>0将-1转成一个大数,splice()就不会错误删除了。

let arr = arr.splice(arr.indexOf(item) >>> 0)

三:按位与  &

1. 将left 和 right 十进制数字通过toString(2)得到二进制后 进行按位比较 同一位置都为1 则为1 否则为 0

8 & 7 => 0

转为二进制为

1000 & 0111 => 0000 => 0

1 & 7 => 1

0001 & 0111 => 0001 => 1

 2. 奇偶性

根据&的特性,我们可以利用与1进行&操作奇偶性

// 奇数则为1
1 & 1 => 1

// 偶数则为0
2 & 1 => 0

四:按位或 |

1.与按位与&不同的是, 按位或|,只要有一位为1,则结果就是1

8 | 7 => 15

1000 | 0111 => 1111 => 15

2.向下取整

10.2 | 0 => 10

五: 按位异或 ^

1. 每一位都不同,结果才为1

8 ^ 7 => 15

1000 ^ 0111 => 1111 => 15

8 ^ 8 => 0

 


版权声明:本文为qq_33401924原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。