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

·  阅读 395

逻辑位运算符

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

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

其它

位运算实现数字加减

分类:
前端
分类:
前端