Bitwise 按位运算符

293 阅读3分钟

按位运算符的运算是先将操作数转换为二进制数值,最多的保留32位整数,超过32的数字将被丢弃其最高有效位

Before: 11100110111110100000000000000110000000000001
After:              10100000000000000110000000000001

十进制和二进制的转换

使用 parseInt 做进制转换

parseInt(101, 2) // 5 将二进制转为 10 进制

// 第二个参数不传默认为 10
parseInt(101) // 101

二进制转换为十进制计算方法就手动百度吧(不为 0 的位置做 2 的位数幂运算并求和)

按位与运算符 (&)

与 & 运算符操作数转为二进制数值之后按位构造运算结果,其运算的结果表如下

aba & b
000
010
100
111

最终运算得出二进制结果再转为十进制返回

const a = 5;        // 00000000000000000000000000000101
const b = 3;        // 00000000000000000000000000000011

console.log(a & b); // 00000000000000000000000000000001
// 1

按位非运算符 (~)

非 ~ 运算符其实就是对操作数的二进制每一位取反。例如

const a = 5;     // 0000000000000101

console.log(~a); // 1111111111111010

~ 运算符的结果和原数值做 & 运算结果为 0

const a = 8

console.log(a & (~a)) // 0

按位或运算符 (|)

或 | 运算符运算符操作数转为二进制数值之后按位构造运算结果,其运算的结果表如下

aba & b
000
011
101
111

最终运算得出二进制结果再转为十进制返回

const a = 5;        // 00000000000000000000000000000101
const b = 3;        // 00000000000000000000000000000011

console.log(a | b); // 00000000000000000000000000000111
// 7

按位异或运算符 (^)

异或 ^ 运算符运算符操作数转为二进制数值之后按位构造运算结果,其运算的结果表如下

aba & b
000
011
101
110

最终运算得出二进制结果再转为十进制返回

const a = 5;        // 00000000000000000000000000000101
const b = 3;        // 00000000000000000000000000000011

console.log(a ^ b); // 00000000000000000000000000000110
// expected output: 6

参考文档

MDN