29 votes

Quelle est la différence entre l'opérateur >>> en Java et JavaScript?

Code JavaScript:

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

Code Java:

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

Pourquoi? J'ai lu la documentation, mais je n'ai pas trouvé la différence. Comment porter du code JavaScript sur Java?

34voto

Iluvatar Points 1257

Les deux sont le décalage logique à droite, mais JavaScript présente une certaine bizarrerie dans la façon dont il gère les nombres. Normalement, les nombres en JavaScript sont des flottants, mais les opérations au niveau du bit les convertissent en entiers 32 bits non signés. Ainsi, même si la valeur ne devrait pas changer, elle convertit le nombre en un entier non signé 32 bits.

La valeur que vous voyez 4294843840 est exactement les mêmes bits que -123456 , mais interprétée comme non signée au lieu de signée.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X