没啥多解释的,举例子,看用法

// 与运算符 AND &
// 如果两位都是 1 则设置每位为 1
/*

0 & 0    00 & 1    01 & 0    01 & 1    11111 & 0010    0010

*/

// 或运算符 OR |
// 如果两位之一为 1 则设置每位为 1
/*

0 | 0    00 | 1    11 | 0    11 | 1    11111 | 0010    1111

*/

// 异或运算符 XOR ^ (bitwise-xor)
// 当对一对数位进行位运算 XOR 时,如果数位是不同的则返回 1
/*

0 ^ 0    00 ^ 1    11 ^ 0    11 ^ 1    01111 ^ 0010    1101

*/
// 0 ^ 0 = 0;
// 0 ^ x = x; (x != 0);
// x ^ 0 = x; (x != 0);
// x ^ x = 0; (x != 0);

// x ^ y = y ^ x;

// 非运算符 NOT ~
// 反转所有位
/*

~ 5  ->  ~0101  ->  1010  ->  10

*/

// 零填充左位移 <<
// 通过从右推入零向左位移,并使最右边的位脱落。

// 语法 数值 << 左移位数 (num << digit)
// 如
5 << 1 // 示意数值5左移1位后的后果 -> 10
/*

  操作     后果        等同于        后果5 << 1     10        0101 << 1       1010

阐明:

num << 1  等价于 num * 2num << 2  等价于 num * (2 ** 2)   num 乘以 2的2次方nun << 3  等价于 num * (2 ** 3)   num 乘以 2的3次方num << n  等价于 num * (2 ** n)

*/

// 有符号右位移 >> (Right shift)
// 通过从左推入最左位的拷贝来向右位移,并使最左边的位脱落。

// 语法 数值 >> 右移位数 (num >> digit)
// 如
5 >> 1 // 示意数值5右移1位后的后果 -> 4
/*

  操作     后果        等同于        后果5 >> 1      2        0101 >> 1       00109 >> 2    2-9 >> 2  -3

阐明:

num >> 1  等价于 Math.floor(num / 2)  num除以2向下取整num >> n  等价于 Math.floor(num / (2 ** n))

*/

// 零填充右位移 >>>
// 通过从左推入零来向右位移,并使最左边的位脱落。
// ↑ >>>这个在正数的时候会产生负数后果,人脑不太好设想,用的也很少

// 语法 数值 >>> 右移位数 (num >>> digit)
// 如
5 >>> 1 // 示意数值5右移1位后的后果 -> 2
/*

  操作     后果        等同于        后果5 >>> 1      2       0101 >>> 1       0010

*/

同步更新到本人的语雀
https://www.yuque.com/diracke...