没啥多解释的,举例子,看用法
// 与运算符 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...