Javascript 按位与运算符 (&)使用介绍


在JavaScript中,按位与运算符(`&`)是一种对两个数的二进制形式进行逐位比较的操作符。只有当两个相应的位都为1时,结果位才为1,否则为0。这个运算符通常用于处理整数的位级操作。

下面是一些使用按位与运算符的示例:

### 基本用法


let a = 6;  // 二进制表示为 110
let b = 3;  // 二进制表示为 011

let c = a & b;  // 结果为 2,二进制表示为 010
console.log(c);

在这个例子中,`6`(`110`)和`3`(`011`)进行按位与操作,只有第二位是共有的1,所以结果是`2`(`010`)。

### 清除位

按位与可以用来清除(即设置为0)一个数中特定的位。


let flags = 5;  // 二进制表示为 101
let mask = 2;   // 二进制表示为 010

// 清除flags的第二个位
let clearedFlags = flags & ~mask; // 等同于 flags & (1 << 1 - 1) 的反码
console.log(clearedFlags);  // 输出 1,二进制表示为 001

在这个例子中,`mask`用来指示要清除的位(第二位),通过`~mask`得到其反码(`101`),然后与`flags`进行按位与操作,结果清除了第二位。

### 提取位

按位与也可以用来提取一个数中特定的位。


let value = 6;  // 二进制表示为 110
let bitPos = 1; // 假设我们要提取第二位(从0开始计数)

let bitMask = 1 << bitPos; // 创建位掩码 010
let extractedBit = (value & bitMask) !== 0; // 检查结果是否非零
console.log(extractedBit); // 输出 true,因为第二位是1

这里,我们首先创建了一个位掩码`bitMask`,它只在我们感兴趣的位上有一个1(在这个例子中是第二位)。然后,我们将这个掩码与原始值进行按位与操作,并检查结果是否非零,以确定该位是否被设置。

### 注意事项

- 当操作数不是整数时,JavaScript会首先将它们转换为32位整数(对于有符号整数)或32位无符号整数(取决于操作),然后执行按位操作。

- 按位与运算符不会改变原始操作数的值,而是返回一个新的值。

- 在处理大整数或需要高精度结果时,可能需要考虑使用其他方法,因为按位操作仅限于32位(或在某些JavaScript引擎中可能是64位,但行为可能因实现而异)。