[JS] 位运算符 ( & | ^ ~ << >> >>> )

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

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

0 & 0    0
0 & 1    0
1 & 0    0
1 & 1    1

1111 & 0010    0010

*/

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

0 | 0    0
0 | 1    1
1 | 0    1
1 | 1    1

1111 | 0010    1111

*/

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

0 ^ 0    0
0 ^ 1    1
1 ^ 0    1
1 ^ 1    0

1111 ^ 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 * 2
num << 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       0010
9 >> 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...

你可能感兴趣的:([JS] 位运算符 ( & | ^ ~ << >> >>> ))