按位运算符的运算是先将操作数转换为二进制数值,最多的保留32位整数,超过32的数字将被丢弃其最高有效位
Before: 11100110111110100000000000000110000000000001
After: 10100000000000000110000000000001
十进制和二进制的转换
使用 parseInt 做进制转换
parseInt(101, 2) // 5 将二进制转为 10 进制
// 第二个参数不传默认为 10
parseInt(101) // 101
二进制转换为十进制计算方法就手动百度吧(不为 0 的位置做 2 的位数幂运算并求和)
按位与运算符 (&)
与 & 运算符操作数转为二进制数值之后按位构造运算结果,其运算的结果表如下
| a | b | a & b |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 0 |
| 1 | 0 | 0 |
| 1 | 1 | 1 |
最终运算得出二进制结果再转为十进制返回
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
按位或运算符 (|)
或 | 运算符运算符操作数转为二进制数值之后按位构造运算结果,其运算的结果表如下
| a | b | a & b |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 1 |
最终运算得出二进制结果再转为十进制返回
const a = 5; // 00000000000000000000000000000101
const b = 3; // 00000000000000000000000000000011
console.log(a | b); // 00000000000000000000000000000111
// 7
按位异或运算符 (^)
异或 ^ 运算符运算符操作数转为二进制数值之后按位构造运算结果,其运算的结果表如下
| a | b | a & b |
|---|---|---|
| 0 | 0 | 0 |
| 0 | 1 | 1 |
| 1 | 0 | 1 |
| 1 | 1 | 0 |
最终运算得出二进制结果再转为十进制返回
const a = 5; // 00000000000000000000000000000101
const b = 3; // 00000000000000000000000000000011
console.log(a ^ b); // 00000000000000000000000000000110
// expected output: 6