js运算符(逻辑位,移位)

1,184 阅读3分钟

逻辑位运算符

逻辑位运算符:位与(&)、位或(|)、位异或(^)、非位(~)

在位运算中,数值 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

image.png

参考

c.biancheng.net/view/5471.h…

www.taichi-maker.com/homepage/re…

其它

位运算实现数字加减