2009-10-27 68 views
5

以下Javascript語句對a有何作用?Javascript中的>>> =運算符是什麼?

a >>>= b; 
+4

真的,你不能使用谷歌來找到這些信息? – 2009-10-27 20:27:16

+3

你試過Google搜索「>>> =」嗎? – Tinister 2009-10-27 20:29:15

+19

本網站的部分目標是成爲最終參考;我不認爲簡單的問題是不合適的。 Google會在查詢中忽略「>>>」;你必須知道搜索「運營商」或「按位運營商」。 – 2009-10-27 20:29:22

回答

12

它做同樣的事情,因爲這:

a = a >>> b; 

除了a只計算一次(有如果評估涉及任何副作用可見差異)。

>>>unsigned (logical) right shift

+0

謝謝!這是我在這裏看到的一些瘋狂的複雜編碼/解碼代碼。 – 2009-10-27 20:35:37

+1

對於a = a >>> b','a'也只是「評估一次」。這不像是第二次被擡頭看。兩個表達式都返回表達式的返回值,而不是'a'(它被設置爲值)。 – 2009-10-28 00:12:01

+1

@Elijah:假定'a'是任意表達式的佔位符,而不僅僅是一個標識符。 – 2009-10-28 02:36:22

3

這是一個稱爲零填充右移的按位運算符。它將a的二進制表示向右移動b個位置,並用零替換空項。然後結果將被分配到a

5

我右移b值中指定的位數值,而不保留符號。

它就像>> =運算符一樣,權限轉移了一個值,只是這個值不會改變數字的符號。

例子:

var a = -1; 

// a now contains -1, or 11111111 11111111 11111111 11111111 binary 

var b = 1; 
a >>>= b; 

// a now contains 2147483647, or 01111111 11111111 11111111 11111111 binary. 
+0

謝謝你提供這個例子! – 2009-10-27 20:43:34

+0

神聖的廢話,這是一些複雜的東西! O_0 – KyleFarris 2009-10-27 21:03:08

0

Crockford points out,雖然JavaScript有位運算符像>>>,利用他們在其原生雙精度浮點數意味着來回轉換成整數內部。它們不會像使用本地整型數據類型的其他語言那樣高效。