共计 938 个字符,预计需要花费 3 分钟才能阅读完成。
没啥多解释的,举例子,看用法
// 与运算符 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…