介绍
虽然JavaScript中的bitwise操作员几乎没有得到任何关注,但它们实际上非常强大,并且具有广泛的用途,它们被考虑用于更快的数字计算和转换,我们可以利用它们来取代某些复杂的编码场景,使我们的代码更易读。
到本教程结束时,您将获得对bitwise操作员的基本理解,它们是什么,以及如何使用它们。
前提条件
在您开始本指南之前,您将需要以下内容:
概念前提条件
- 关于二进制的非常基本的理解
- 逻辑
和
和或
操作员的运作方式以及使用它们的结果。
技术前提条件
- [如何使用JavaScript开发者控制台][https://andsky.com/tech/tutorials/how-to-use-the-javascript-developer-console]
- [如何在JavaScript中编码][https://www.digitalocean.com/community/tutorial_series/how-to-code-in-javascript]
二进制如何在JavaScript中工作
由于bitwise操作员在二进制层面工作,所以了解JavaScript为二进制转换提供了什么是至关重要的。
我们可以使用如下所示的 toString()
函数将任何数字转换为字符串:
1var n = 2;
2console.log(n.toString());
1[secondary_label Output]
22
ToString
函数有一个参数(称为radix),可以用来指定基数. 基数决定目标转换. 您可以通过2
来获得二进制,8
来获得十进制,并16
来获得被转换的数字的六进制值. 默认情况下,它是10,从而返回十进制值。
1var num = 18;
2var binaryText = num.toString(2);
3console.log(binaryText);
1[secondary_label Output]
210010
正如我们所看到的,数字 18被转换为二进制字符串 - 10010。
<$>[注] 提示: 要做到逆行(从二进制字符串中获取数字),我们可以使用
1parseInt("binary_string",2);
所以,在我们的情况下,要将10010
转换为18号,我们可以使用以下代码:
1var num = 18;
2var binaryText = num.toString(2);
3console.log(binaryText);
4console.log(parseInt(binaryText));
1[secondary_label Output]
210010
318
美元
这涵盖了二进制转换如何在JavaScript中工作的基本知识。我们可以与bitwise操作员合作,而不真正了解二进制转换。然而,我们可能无法理解bitwise操作员的结果是如何计算的。
使用 Bitwise 运营商
对于本教程,让我们来考虑对比特方式操作的基本数字. 我们将使用的数字将是1,2和3。
第001章
2 0 0 0 0 0
第011章
<$>[注] **注:**实际的二进制字符串将有63 0s和1在结尾构成64位二进制表示。
和(&)
bitwise AND 操作器可以使用符号 &
(请注意,我们在非二进制变量之间的逻辑 AND 操作中使用双&
)
以下是&
为比特返回的内容:
0 和 0 = 0
1 和 0 = 0
1 和 1 = 1
这与我们的逻辑 AND 操作非常相似 - 如果两个条件都是真的,那么返回 true 否则返回 false. 在这种情况下, true 被 1 取代,0 等于 false。
JavaScript 通过比较每个二进制比特来生成结果的二进制数字. 下表显示了数字 1 和 3 之间的比特和。
Number | Binary equivalent | Binary Bits | ||
---|---|---|---|---|
1 | 001 | 0 | 0 | 1 |
& | & | & | & | & |
3 | 011 | 0 | 1 | 1 |
Result = 1 | 0 & 0 = 0 | 0 & 1 = 0 | 1 & 1 = 1 |
因此,1
和3
结果为1
。内部,JavaScript识别了bitwise操作员并将1和3转换为二进制格式,并将bitwise AND应用于每位,并将结果的二进制字符串转换为十进制数字。
1console.log(1&3);
Bitwise OR 使用单个符号``。
以下是``为比特返回的内容:
0 0 0 0 0 0 0
1 0 = 1
1 1 = 1
這類似於邏輯 OR 操作 - 如果任何一個條件是真的,那麼返回 true 否則返回 false. 在這種情況下, true 被 1 取代,0 等於 false。
下表显示了数字1和3之间的Bitwise OR。
Number | Binary equivalent | Binary Bits | ||
---|---|---|---|---|
1 | 001 | 0 | 0 | 1 |
3 | 011 | 0 | 1 | 1 |
Result = 3 | 0 | 0 = 0 | 0 |
如果我们将结果的字符串 011 转换为十进制,那么我们将获得3
作为输出,因此,1``3
结果为3
。在内部,JavaScript 识别了位数操作员,并将 1 和 3 转换为二进制格式,并应用到位数或每个比特,并将结果的二进制字符串转换为十进制数字。
( )
bitwise XOR 的标志是^
。
以下是^
为比特返回的内容:
0 0 0 = 0
1 0 = 1
1 ^ 1 = 0
XOR(exclusive OR)的规则是,如果两位是不同的,则返回1
或0
。
Number | Binary equivalent | Binary Bits | ||
---|---|---|---|---|
1 | 001 | 0 | 0 | 1 |
^ | ^ | ^ | ^ | ^ |
3 | 011 | 0 | 1 | 1 |
Result = 2 | 0 ^ 0 = 0 | 0 ^ 1 = 1 | 1 ^ 1 = 0 |
Bitwise Shift 左边(<<)
语法: 数字 << 位置
转移操作员的左侧号码是实际号码,转移操作员的右侧是位置,例如,5 << 2
告诉JavaScript在两个位置上对数字5进行一个转移。
- 它将数字转换为二进制等级. 在我们的情况下,数字 5 将转换为二进制形式,即 - 101.
- 将两个 00s 添加到二进制字符串的右侧. 这将导致数字 5 的 10100
- 将二进制字符串转换为十进制字符串. 在我们的情况下,它将是 20. 所以,
js console.log(5<<2);
将产生数字 20.
Bitwise Shift 右边(>>)
语法: 数字 > 位置
右转操作员将从右移除二进制数字. 多少个数字将被移除? 正如你可能已经猜到的那样,这个数字被称为位置。
这里有一个例子:假设我们有5 >> 2。
- JavaScript 将 5 转换为二进制等级. 101 在我们的情况下.
- 从右侧删除两个数字. 这将导致 101.
- 将结果转换为十进制。
结论
Bitwise 操作员起初听起来很复杂,但是一旦我们了解基本知识,它非常简单。我们可以使用 ".toString(2)" 方法将任何数字转换为二进制。
- Bitwise AND 返回 1 如果兩個比特都是 1 其他 0.
- Bitwise OR 返回 1 如果至少一個比特是 1 其他 0.
- Bitwise XOR 只返回 1 如果兩個比特都是不同的。
希望这个简短的介绍有助于了解bitwise操作员及其结果是如何计算的。