在 JavaScript 中使用位运算符

介绍

虽然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 之间的比特和。

NumberBinary equivalentBinary Bits
1001001
&&&&&
3011011
Result = 10 & 0 = 00 & 1 = 01 & 1 = 1

因此,13结果为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。

NumberBinary equivalentBinary Bits
1001001
3011011
Result = 300 = 00

如果我们将结果的字符串 011 转换为十进制,那么我们将获得3作为输出,因此,1``3结果为3。在内部,JavaScript 识别了位数操作员,并将 1 和 3 转换为二进制格式,并应用到位数或每个比特,并将结果的二进制字符串转换为十进制数字。

( )

bitwise XOR 的标志是^

以下是^为比特返回的内容:

0 0 0 = 0

1 0 = 1

1 ^ 1 = 0

XOR(exclusive OR)的规则是,如果两位是不同的,则返回10

NumberBinary equivalentBinary Bits
1001001
^^^^^
3011011
Result = 20 ^ 0 = 00 ^ 1 = 11 ^ 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操作员及其结果是如何计算的。

Published At
Categories with 技术
comments powered by Disqus