这些 JavaScript 按位运算符有什么作用?

IT技术 javascript operators bit-manipulation
2021-01-18 13:36:57
  • x <<= y (x = x << y)
  • x >>= y (x = x >> y)
  • x >>>= y (x = x >>> y)
  • x &= y (x = x & y)
  • x ^= y (x = x ^ y)
  • x |= y (x = x | y)

这些不同的运营商做什么?

3个回答
<<, >>

分别向左和向右移位如果您将左操作数想象为一个二进制位序列,那么您就是它们向左或向右移动右操作数所指示的位数。

&, ^, |

它们分别是按位你能想到的&,并|为同行&&||,但他们会将自己的操作数为位向量,并在每个位执行逻辑运算。没有^^操作符,但这个操作是“xor”或“ exclusive or ”。您可以将“a xor b”视为“a 或 b,但不能两者兼有”。

只是为了完整性,除了移位运算符,这些东西也适用于布尔值(它们可能或可能不是按位 - 它们在 Visual Basic 中,但不是(按规范)在 Java,AFAIK 中。)&|然后与&&并且||这两个操作数总是被评估,而在&&/||版本中,如果第二个操作数在第一个操作数被评估后无法更改表达式的值,则不会评估第二个操作数。
2021-04-07 13:36:57

这是一个尝试,使初学者的事情变得简单。

先决条件

您必须熟悉二进制数字系统(由两位数字组成的数字)。如果您不是,请先检查此链接:https : //www.mathsisfun.com/binary-number-system.html以防万一之前的链接中断,这个答案可能会有所帮助:https : //stackoverflow.com/a/32155850/1636522

实际上,为了弄清楚这些运算符是如何工作的,您需要知道在该运算中涉及的数字后面是哪个位序列。之后,您应该能够理解以下内容。

提醒

十进制数字及其二进制符号:

0    0 | 5  101
1    1 | 6  110
2   10 | 7  111
3   11 | 8 1000
4  100 | 9 1001

是什么>>>>>以及<<做什么?

这些运算符将位序列向左或向右移动。

 decimal | binary      decimal | binary 
---------|---------   ---------|---------
       9 |    1001           2 |      10
    >> 2 | >>    2        << 2 | <<    2
     = 2 |  =   10         = 8 |  = 1000

是什么&|以及^做什么?

这些运算符组合两个数字的位以创建一个新数字。

 decimal | binary     decimal | binary     decimal | binary
---------|--------   ---------|--------   ---------|--------
       5 |    101           5 |    101           5 |    101
     & 6 |  & 110         | 6 |  | 110         ^ 6 |  ^ 110
     = 4 |  = 100         = 7 |  = 111         = 3 |  = 011

如何&工作?

对于每对位:如果两位中至少有一位为 0,则结​​果位为 0。如果两位都不为 0,则结​​果位为 1。

  101    bit 3 | bit 2 | bit 1
& 110   -------|-------|-------
= 100      1   |   0   |   1
           &   |   &   |   &
           1   |   1   |   0
           =   |   =   |   =
           1   |   0   |   0

如何|工作?

对于每对位:如果两位中至少有一位为 1,则结果位为 1。如果两位都不为 1,则结果位为 0。

  101    bit 3 | bit 2 | bit 1
| 110   -------|-------|-------
= 111      1   |   0   |   1
           |   |   |   |   |
           1   |   1   |   0
           =   |   =   |   =
           1   |   1   |   1

如何^工作?

对于每对位:如果两位不同,则结果位为1。如果两位相同,则结果位为0。

  101    bit 3 | bit 2 | bit 1
^ 110   -------|-------|-------
= 011      1   |   0   |   1
           ^   |   ^   |   ^
           1   |   1   |   0
           =   |   =   |   =
           0   |   1   |   1