web-dev-qa-db-fra.com

Devrais-je changer de bort pour diviser par 2 en Java?

DUPLICATES POSSIBLES:
se transforme des bits plus rapidement que de multiplier et de diviser en Java? .NET?
[.____] Quick Java question d'optimisation

Il y a de nombreuses années à l'université, j'ai appris que le changement de bit à droite par l'un accomplit la même chose que de diviser par deux, mais est généralement nettement plus rapide. Je ne sais pas comment Java est venu dans cette direction depuis les 9 à 10 ans, j'ai appris à ce sujet. Est-ce que le Java compilateur convertit automatiquement un Divisez-en-deux en une opération de décalage bit, ou devriez-je effectuer manuellement l'opération de décalage du bit dans le code moi-même?

29
Matt Huggins

Les compilateurs modernes sont suffisamment intelligents pour générer le code le plus rapide pour les divisions par deux. Ils feront un quart de travail s'il est plus rapide. Si ce que vous voulez réaliser est une division par 2, l'utilisation d'une division rendra votre code plus clair. Et vous éviterez des problèmes lorsque le nombre à diviser est négatif.

19
Rémi

Oui, c'est la toute première chose que quiconque tenter de faire des optimisations du compilateur sera (et a fait pendant au moins 5 décennies), il est certainement fait par le Java compiler, et vous "D Ayez probablement un temps très difficile à trouver un compilateur qui ne le fait pas.

Et même s'ils ne l'étaient pas, il s'agirait toujours d'une micro-optimisation prématurée qui devrait être évitée en faveur du code plus clair.

15

La routine de division pour votre CPU gérera ceci. Vous n'avez pas besoin de le faire.

Ceci est connu sous le nom de optimisation prématurée.

11
Malfist