2009-10-27 4 views
5

Co robi poniższe oświadczenie JavaScript do a?Co to jest operator >>> = w JavaScript?

a >>>= b; 
+4

Naprawdę nie można użyć google do znalezienia tych informacji? –

+3

Czy próbowałeś Googling ">>> ="? – Tinister

+19

Częścią celu tej witryny jest ostateczne odniesienie; Nie uważam, że proste pytania są nieodpowiednie. Google zignoruje ">>>" w zapytaniu; musisz wiedzieć, aby wyszukać "operatorów" lub "operatorów bitowych". –

Odpowiedz

12

Czyni to samo jak to:

a = a >>> b; 

Poza tym a oceniana jest tylko raz (co ma zaobserwować różnicę, jeśli jego ocena wiąże żadnych skutków ubocznych).

I >>> jest unsigned (logical) right shift.

+0

Dziękuję! To jest jakiś zwariowany kod kodowania/dekodowania, którego tutaj szukam. –

+1

'a' jest tylko" ocenione raz "także dla' a = a >>> b'. To nie tak, że po raz drugi jest tam podziwiany. Oba wyrażenia zwracają wartość zwracaną wyrażenia, a nie "a" (która została ustawiona na wartość). –

+1

@ Elijah: założeniem jest, że 'a' jest symbolem zastępczym dla dowolnego wyrażenia, a nie tylko identyfikatora. –

3

Jest to operator bitowy o nazwie zero-fill right shift. Spowoduje to przesunięcie binarnej reprezentacji a po prawej stronie przez b miejsc i zastąpienie pustych elementów zerami. Następnie wynik zostanie przypisany do a.

5

I prawy przesuwa wartość w liczbie bitów określonej przez wartość w b, bez zachowania znaku.

To jak operator >> =, który przesuwa wartość, tyle tylko, że nie zmienia znaku liczby.

Przykład:

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

Dziękujemy za dostarczenie tego przykładu! –

+0

Holy crap, to trochę skomplikowane rzeczy! o_0 – KyleFarris

0

Crockford points out że podczas JavaScript jest logicznie operatorów jak >>>, wykorzystując je na swoich rodzimych podwójnej precyzji liczb zmiennoprzecinkowych zakłada przekształcenie iz powrotem do liczb całkowitych wewnętrznie. Nie będą tak wydajne, jak w innych językach z natywnymi typami danych liczbowych.