返回

不仅仅是位运算:在JavaScript中理解运算符><<>>

前端

深入浅出理解 JavaScript 位运算符

在 JavaScript 中,位运算符主要包括以下几种:

  • 按位与运算符(&):将两个数字的二进制位逐位相与,结果为 1 当且仅当两个位都为 1。
  • 按位或运算符(|): 将两个数字的二进制位逐位相或,结果为 0 当且仅当两个位都为 0。
  • 按位异或运算符(^):将两个数字的二进制位逐位相异或,结果为 0 当且仅当两个位相同。
  • 左移运算符(<<):将数字的二进制位向左移动指定位数,空出的位补 0。
  • 右移运算符(>>):将数字的二进制位向右移动指定位数,空出的位补 0。
  • 右移算术运算符(>>>):将数字的二进制位向右移动指定位数,空出的位补 0,同时丢弃符号位。

案例: 坑在哪儿?

我来举一个具体的例子来帮助你理解这些运算符是如何工作的。假设我们有两个数字,13 和 19。它们的二进制表示分别为 1101 和 10011。

console.log(13 & 19); // 1
console.log(13 | 19); // 27
console.log(13 ^ 19); // 26
console.log(13 << 2); // 52
console.log(13 >> 2); // 3
console.log(13 >>> 2); // 3

从输出结果中,我们可以看到:

  • 按位与运算符(&) 将两个数字的二进制位逐位相与,结果为 1 当且仅当两个位都为 1。因此,13 & 19 的结果为 1,因为只有最低位是 1。
  • 按位或运算符(|): 将两个数字的二进制位逐位相或,结果为 0 当且仅当两个位都为 0。因此,13 | 19 的结果为 27,因为只有最高位是 0。
  • 按位异或运算符(^):将两个数字的二进制位逐位相异或,结果为 0 当且仅当两个位相同。因此,13 ^ 19 的结果为 26,因为只有最低位是相同的。
  • 左移运算符(<<):将数字的二进制位向左移动指定位数,空出的位补 0。因此,13 << 2 的结果为 52,因为二进制位向左移动了 2 位,空出的位补 0。
  • 右移运算符(>>):将数字的二进制位向右移动指定位数,空出的位补 0。因此,13 >> 2 的结果为 3,因为二进制位向右移动了 2 位,空出的位补 0。
  • 右移算术运算符(>>>):将数字的二进制位向右移动指定位数,空出的位补 0,同时丢弃符号位。因此,13 >>> 2 的结果也是 3,因为二进制位向右移动了 2 位,空出的位补 0,并且符号位被丢弃了。

应用:位运算符的用武之地

位运算符在 JavaScript 中有着广泛的应用,包括:

  • 位掩码:位掩码是用于清除或设置数字的特定位的操作。例如,我们可以使用位掩码来清除数字的最低位。
  • 位字段:位字段是将多个相关位组合成一个整体的操作。例如,我们可以使用位字段来表示一个颜色。
  • 位计数:位计数是计算数字中 1 的数量的操作。例如,我们可以使用位计数来计算一个数字的二进制表示中 1 的数量。
  • 位操作:位操作是使用位运算符来执行算术和逻辑操作的操作。例如,我们可以使用位运算符来执行加法、减法、乘法和除法。

避免误入歧途的建议

最后,我想分享一些建议来帮助你避免在使用 JavaScript 中的位运算时遇到坑:

  • 首先,要牢记位运算符的优先级。位运算符的优先级高于算术运算符,因此在使用位运算符时要特别注意括号的使用。
  • 其次,要记住位运算符是逐位操作的。这意味着位运算符将两个数字的二进制位逐个比较,然后根据比较结果来决定输出结果。
  • 第三,要小心使用位移运算符(<<和>>)。位移运算符可以很容易地导致溢出或下溢,因此在使用位移运算符时要特别注意。