在C或者其他语言数值的运算其实都是先将数值转换为二进制在做运算的,
而位运算符就是直接进行二进制运算, 因此速度会非常快. 但是对于JavaScript
来说, 执行环境一般接触不到硬件, 所以性能完全不能和其他语言相比. 不过作为
了解还是需要的, 只对较为常见的位运算符作记录.

位运算 NOT

位运算 NOT 由 ( ~ ) 符号表示, 其实就是对数值求负之后再减一, 如:

1
2
3
4
5
6
7
let num = 10;
let num2 = ~num;

// ~num 效果同下
num2 = -num - 1;

console.log(num2); // -11

左位移运算

左位移运算由 ( << ) 符号表示. 将数值的所有位向左移动指定数量.例如:
左移一位乘2, 左移2位乘4, 以此类推.

1
2
3
4
5
6
7
let num = 2;
let num2 = num << 2;

// 效果同下
num2 = num * 4;

console.log(num2); // 8

有符号右移运算

有符号右移运算符由 ( >> ) 符号表示, 将数值的所有为向右移动指定位数,
同时保留该数的符号 (正号或者负号) . 有符号右移运算符跟左位移运算符正好
相反.

1
2
3
4
5
6
7
let num = 12;
let num2 = num >> 2;

// 效果同下
num2 = num / 4;

console.log(num2) // 3

无符号右位移运算符

无符号运算符由 ( >>> ) 符号表示, 对于正数无符号右位移运算符跟无符号右位移
运算符规则相同; 负数时会出现无限大的数值, 所以决定使用无符号右位移运算符
时一定要小心.