2016-12-06 27 views
29

JavaScript kodu:Java ve JavaScript'te operatör >>> arasındaki fark nedir?

alert(-123456 >>> 0); // Prints 4294843840 

Java kodu:

System.out.println(-123456 >>> 0); // Prints -123456 

Neden? Belgeleri okudum ama farkı bulamadım. JavaScript kodunu Java'ya nasıl yüklerim?

+0

JS'de imzalı bir doğru kaydırma istiyorsanız, '>>' kullanın. – Bergi

+0

Java bölümü için ayrıca bkz. Http://stackoverflow.com/questions/2811319/difference-between-and – Tunaki

cevap

34

Her ikisi de mantıksal doğru kaymadır, ancak JavaScript'in sayıları işleme biçiminde bazı gariplikleri vardır. Normalde JavaScript'deki sayılar yüzer, ancak bit işlemleri, işaretlenmemiş 32 bit tam sayılara dönüştürür. Bu yüzden değer değişmemeli gibi gözükse de, sayıyı 32 bit işaretsiz bir tam sayıya dönüştürür.

4294843840'u gördüğünüz değer, -123456 ile aynı bittir, ancak imzasız yerine imzasız olarak yorumlanır.

+13

Minor nit; "Float-like" değiller, * her zaman açıkça * IEEE-754. Buradaki konu içsel, geçici dönüşümden geliyor. –

+2

temel olarak hem java hem de javascript'te, bu örnekte, 'right-shifting' (vardiya '0' olduğu için) değil, javascript'te, sadece sayıyı imzasız bir sayıya dönüştürür. bu anlayış doğru mu? –

+0

Evet, bu doğru. (Ayrıca, bir int'ye dönüştürülür, ancak bu durum hiçbir şeyi değiştirmez) – Iluvatar

İlgili konular