2012-05-02 50 views
11

我在一些JS代碼看到這個:操作符是什麼「>>」(雙箭頭)和「|」 (單管)在JavaScript中的意思?

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

我挺想知道什麼了很多,這意味着。具體來說「>>」,單個管道「|」和最後一行中的「&」符號?

非常感謝!

+3

二元運算符。 – Pointy

+1

(-1)搜索「JavaScript運算符」... -1,因爲這是易於獲得的信息*和*在StackOverflow中已經非常常見。 – 2012-05-02 22:52:01

+2

http://stackoverflow.com/questions/6194950/single-pipe-in​​-javascript,http://stackoverflow.com/questions/6997909/what-do-and-mean-in-javascript – 2012-05-02 22:53:50

回答

16

x >> yy地方來的x位轉移右邊(<<在左邊)。

x | y裝置的xy的位比較,把一個1在每個比特如果任xy具有在該位置一個1

x & y相同|,除了結果是1如果BOTH 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 

有關詳細信息,search Google for "bitwise operators"

+0

稍微詳細一點[解釋](http://digitalfortress.tech/js/double-arrow-js-bitwise-operator/),以防你仍然不太確信。 –

7

>>是一個正確的按位移。它需要位並將它們右移n地點。例如,讓我們來看看35 >> 2

35 = 100011 shift two places 
    001000 = 8 

事實上,35 >> 2 == 8


|是一個按位或。它需要每個操作數中的每一位並將它們組合在一起。你可以將它想象成一種二元加法,但是當頂部和底部都是1時,你不會攜帶。例如,這裏的5 | 3

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

事實上,5 | 3 == 7


最後,&是一個按位與。它取每個操作數中的每一位,除非一個位或另一個是1,否則給出1,如果一個位和另一個都是1,則給出1。例如,這裏是5 & 3

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

試一試; 5 & 3 == 1


你可能想知道是<<,這是左按位移位運算的一些其他的,和^,這是一個XOR(0時兩個位相同,1,如果它們是不同的) 。

實際上,n值模數爲32 1 >> 321。不知道爲什麼。

+1

非常感謝您提供有幫助的,非語言化的答案。 – Ashe

+0

這應該是例外答案!很好的解釋 – DoubleA

1
  • &(按位與)
  • | (按位OR)
  • < <(左移位)
  • >>(註冊傳播右移)

實例(從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 < < 2位二進制移位,2位移位):

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

>><<運營商是一個按位移。例如,

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