Skip to content
给每一条河每一座山取一个温暖的名字,我有一所房子,面朝大海,春暖花开。

位运算:operators

  1. 按位操作符(Bitwise operators) 将其操作数(operands)当作 32 位的比特序列(由 0 和 1 组成),而不是十进制、十六进制或八进制数值。
  2. 例如,十进制数 9,用二进制表示则为 1001。
  3. 按位操作符操作数字的二进制形式,但是返回值依然是标准的 JavaScript 数值。

&:与

简述:真真为真,其余为假
用法:a & b
描述:对于每一个比特位,只有两个操作数相应的比特位都是 1 时,结果才为 1,否则为 0。

js
1 & 3; // 1
// 1     (base 10) = 00000000000000000000000000000001 (base 2)
// 3     (base 10) = 00000000000000000000000000000011 (base 2)
//                ---------------------------------------
// 1 & 3 (base 10)   00000000000000000000000000000001 (base 2) = 1 (base 10)
3 & 8; // 0
// 3     (base 10) = 00000000000000000000000000000011 (base 2)
// 8     (base 10) = 00000000000000000000000000001000 (base 2)
//                ---------------------------------------
// 3 & 8 (base 10)   00000000000000000000000000000000 (base 2) = 0 (base 10)

|:或

简述:假假为假,其余为真
用法:a | b
描述:对于每一个比特位,当两个操作数相应的比特位至少有一个 1 时,结果为 1,否则为 0。

|=: 按位或赋值

用法:a |= b
描述:执行按位或运算,并将结果分配给变量。

ts
let a = 5;
a |= 3;
// 00000000000000000000000000000101
// 00000000000000000000000000000011
console.log(a); // 7
// 00000000000000000000000000000111

^:异或

用法:a ^ b
描述:对于每一个比特位,当两个操作数相应的比特位有且只有一个 1 时,结果为 1,否则为 0。

~:非

简述:真为假,假为真
用法:~ a
描述:反转操作数的比特位,即 0 变成 1,1 变成 0。

<<:左移

用法:a << b
描述:将 a 的二进制形式向左移 b (< 32) 比特位,右边用 0 填充。

>>:右移

用法:a >> b
描述:将 a 的二进制表示向右移 b (< 32) 位,丢弃被移出的位。

>>>:无符号右移

用法:a >>> b
描述:将 a 的二进制表示向右移 b (< 32) 位,丢弃被移出的位,并使用 0 在左侧填充。

进制转换与查看:

数字怎么转换进制呢?(示例只取 6 位)

  1. 10 进制转其他 toString(x)
js
const borderTown = 8;
// 转成2进制
borderTown.toString(2); // "001000"
// 解析"1000":1*2^3 + 0*2^2 + 0*2^1 + 0*2^0
//            8     + 0     + 0     + 0      =  8
// 转成8进制
borderTown.toString(8); // "000010"
// 转成16
borderTown.toString(16); // "000008"
  1. 其他转 10 进制 parseInt(value, x)
js
parseInt("001000", 2); // 8
parseInt("000010", 8); // 8
// 16和10一样,是不是。
parseInt("000008", 16); // 8
parseInt("000008", 10); // 8

参考:

MDN:按位操作符

位运算 has loaded