逻辑位运算符
逻辑位运算符:位与(&)、位或(|)、位异或(^)、非位(~)
在位运算中,数值 1 表示 true,0 表示 false,反之亦然
位与(&)
如果两个位都是1,结果为1,否则结果0
let a = 5; // 00000000000000000000000000000101
a &= 3; // 00000000000000000000000000000011
console.log(a); // 00000000000000000000000000000001
// expected output: 1
位或(|)
只要任一表达式的一位为 1,则结果中的该位为 1。否则,结果中的该位为 0
let a = 5; // 00000000000000000000000000000101
a |= 3; // 00000000000000000000000000000011
console.log(a); // 00000000000000000000000000000111
// expected output: 7
位异或(^)
如果两个运算位相同,则结果为0,否则为1
let a = 5; // 00000000000000000000000000000101
a ^= 3; // 00000000000000000000000000000011
console.log(a); // 00000000000000000000000000000110
// expected output: 6
位非(~)
按位取反操作会翻转其每一位。0变为1,1变为0
const a = 5; // 00000000000000000000000000000101
const b = -3; // 11111111111111111111111111111101
console.log(~a); // 11111111111111111111111111111010
// expected output: -6
console.log(~b); // 00000000000000000000000000000010
// expected output: 2
移位运算符
移位运算符:(<<、>>和>>>)
>>=
let a = 5; // 00000000000000000000000000000101
a >>= 2; // 00000000000000000000000000000001
console.log(a);
// expected output: 1
<<=
let a = 5; // 00000000000000000000000000000101
a <<= 2; // 00000000000000000000000000010100
console.log(a);
// expected output: 20
>>>
运算符执行无符号右移位运算
正数
对于无符号数或正数右移运算,无符号右移与有符号右移运算的结果是相同的。
const a = 5; // 00000000000000000000000000000101
const b = 2; // 00000000000000000000000000000010
console.log(a >> b); // 00000000000000000000000000000001
console.log(a >>> b); // 00000000000000000000000000000001
// expected output: 1
负数
对于负数来说,无符号右移将使用 0 来填充所有的空位,同时会把负数作为正数来处理
console.log(-1000 >> 8); //返回值 -4
console.log(-1000 >>> 8); //返回值 16777212
参考
www.taichi-maker.com/homepage/re…