【问题标题】:What do these JavaScript bitwise operators do?这些 JavaScript 位运算符有什么作用?
【发布时间】:2011-05-30 22:29:41
【问题描述】:
  • 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)

这些不同的运算符有什么作用?

【问题讨论】:

标签: javascript operators bit-manipulation


【解决方案1】:

【讨论】:

    【解决方案2】:
    <<, >>
    

    Bit shift 左右分别。如果您将左操作数想象为二进制位序列,则您将这些位向左或向右移动右操作数指示的位数。

    &, ^, |
    

    它们分别是按位 andxoror。您可以将&amp;| 视为&amp;&amp;|| 的对应物,只是它们会将其操作数视为位向量,并对每个位执行逻辑运算。没有^^ 运算符,但这个运算是“xor”或“exclusive or”。您可以将“a xor b”视为“a 或 b,但不能两者兼而有之”。

    【讨论】:

    • 为了完整起见,除了移位运算符之外,这些东西也适用于布尔值(它们可能是按位的,也可能不是按位的——它们在 Visual Basic 中,但在 Java 中不是(按规范), AFAIK。)&amp;|&amp;&amp;|| 的不同之处在于这两个操作数总是被评估,而在 &amp;&amp;/|| 版本中,如果第二个操作数不能在计算第一个操作数后更改表达式的值。
    【解决方案3】:

    这里试图让初学者的事情变得简单。

    先决条件

    您必须熟悉二进制数字系统(由两位数字组成的数字)。如果您不是,请先检查此链接: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
    

    &gt;&gt;&gt;&gt;&gt;&lt;&lt; 是做什么的?

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

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

    &amp;|^ 是做什么的?

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

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

    &amp; 是如何工作的?

    对于每一对位:如果两个位中至少有一个为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
    

    【讨论】:

      猜你喜欢
      • 2020-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-01-03
      • 2013-05-13
      • 2012-07-21
      • 1970-01-01
      相关资源
      最近更新 更多