运营商“>>”是什么(双箭头)和“|” (单管)是指JavaScript吗?

时间:2012-05-02 22:42:55

标签: javascript

我在一些JS代码中看到了这一点:

        index = [
            ascii[0] >> 2,
            ((ascii[0] & 3) << 4) | ascii[1] >> 4,
            ((ascii[1] & 15) << 2) | ascii[2] >> 6,
            ascii[2] & 63
        ];

我很想知道这意味着什么。具体为“&gt;&gt;”,单个管道“|”和“&amp;”最后一行的符号?

非常感谢!

5 个答案:

答案 0 :(得分:17)

x >> y表示将x的位置向y位置向右移动(<<向左)。

x | y表示比较xy的位,如果1xy,则每个位都会加1在该位置x & y

|1相同,但如果xy只有1,则结果为#left-shifting 1 by 4 bits yields 16 1 << 4 = b00001 << 4 = b10000 = 16 #right-shifting 72 by 3 bits yields 9 72 >> 3 = b1001000 >> 3 = b1001 = 9 #OR-ing 8 | 2 = b1000 | b0010 = b1010 = 10 #AND-ing 6 & 3 = b110 & b011 = b010 = 2 。< / p>

示例:

{{1}}

有关详细信息,请search Google for "bitwise operators"

答案 1 :(得分:7)

>>是一个正确的按位移位。它需要位并将它们移位 n 位置 1 。例如,让我们检查一下35 >> 2

35 = 100011 shift two places
     001000 = 8

确实,35 >> 2 == 8


|是一个按位OR。它接受每个操作数中的每个位并将它们组合在一起。您可以将其视为一种二进制加法,但当顶部和底部都为1时,您不会携带。例如,这里是5 | 3

5 = 101
3 = 011
| -----
    111 = 7

确实,5 | 3 == 7


最后,&是一个按位AND。它取每个操作数中的每一位,除了在一位或另一位为1时给出1,如果一位而另一位都是1则给出1。例如,这里是5 & 3

5 = 101
3 = 011
& -----
    001 = 1

尝试一下; 5 & 3 == 1


您可能想要注意的其他一些是<<,它是左按位移位,^是一个XOR(当两个位相同时为0,如果它们为1则为1 “与众不同。”

1 实际上,它是n modulo 32. 1 >> 321。不确定原因。

答案 2 :(得分:4)

>><<运算符是按位移位的。例如,

11 =      00001011
11 << 3 = 01011000 = 88

值得注意的是m << n = m * 2^nm >> n = m / 2^n。这有时用于以2的幂进行非常有效的乘法/除法。

&|是按位和/或分别。

11 =      00001011
28 =      00011100
11 & 28 = 00001000 = 8

11 =      00001011
28 =      00011100
11 | 28 = 00011111 = 31

虽然我正在使用它,但我应该提到^运算符,它不用于幂,而是用于按位异或 - 。

11 =      00001011
28 =      00011100
11 ^ 28 = 00010111 = 23

答案 3 :(得分:1)

对我来说看起来像位运算符:

http://web.eecs.umich.edu/~bartlett/jsops.html

编辑:那个ascii数组已经死了...... LOL

答案 4 :(得分:1)

  • &安培; (按位AND)
  • | (按位OR)
  • &LT;&LT; (左移)
  • &GT;&GT; (符号传播右移)

示例(来自https://developer.mozilla.org/en/JavaScript/Reference/Operators/Bitwise_Operators):

按位和:

     9 (base 10) = 00000000000000000000000000001001 (base 2)
    14 (base 10) = 00000000000000000000000000001110 (base 2)
                   --------------------------------
14 & 9 (base 10) = 00000000000000000000000000001000 (base 2) = 8 (base 10)

左移(9&lt;&lt;&lt;&lt;&lt; 2&lt; 2&lt; 2&gt;位,二进制9位,左边2位):

     9 (base 10): 00000000000000000000000000001001 (base 2)
                  --------------------------------
9 << 2 (base 10): 00000000000000000000000000100100 (base 2) = 36 (base 10)