Bonjour à tous. J'apprends la programmation en java et je voulais savoir pourquoi le choix de la propagation des bits de signe est ">>" et non ">>>"? Je suppose que << et >> devraient avoir la même implémentation. Désolé si cela ressemble à une question idiote :)

Merci d'avance!

-6
Jalearn 5 sept. 2017 à 03:18

2 réponses

Meilleure réponse

La raison pour laquelle cela fonctionne de cette façon est que C et C ++ utilisaient << pour le décalage à gauche et >> pour le décalage à droite bien avant Java. Ces langages ont à la fois des types signés et non signés, et pour les types signés, le bit de signe a été propagé dans le cas du décalage à droite.

Java n'a pas de types non signés, ils ont donc conservé le comportement du C et du C ++ pour ne pas semer la confusion et ne pas susciter la colère éternelle des développeurs du monde entier. Ensuite, ils ont inclus >>> pour fournir un décalage à droite qui traitait la valeur du bit comme non signée.

3
Jim Garrison 5 sept. 2017 à 00:45

Cette question concerne vraiment la lecture de l'esprit de James Gosling :-). Mais je suppose que << et >> ont tous deux un sens mathématiquement: << entraîne la multiplication d'un nombre par 2 (sauf dépassement de capacité) et >> fait qu'un nombre est divisé par 2 - lorsque vous avez une propagation de signe, cela fonctionne que le nombre soit positif ou négatif. Peut-être que les concepteurs du langage ont pensé que ce serait une utilisation plus courante du décalage à droite que l'opérateur qui propage les 0, ce qui est plus utile lorsque les entiers sont traités comme des chaînes de bits plutôt que comme des nombres réels. Ni l'un ni l'autre n'est «juste» ou «faux», et il est possible que si Gosling avait pris quelque chose de différent pour le petit-déjeuner ce matin-là, il aurait pu voir les choses à votre façon à la place ...

1
ajb 5 sept. 2017 à 00:31