duplicados posibles: Hace
Is shifting bits faster than multiplying and dividing in Java? .NET?
Quick Java Optimization Question¿Debería cambiar de bit para dividir por 2 en Java?
muchos años en la universidad, he aprendido que de desplazamiento de bits a la derecha por uno consigue el mismo efecto que dividir por dos, pero es generalmente significativamente más rápido. No estoy seguro de cómo ha llegado Java en ese sentido, ya que hace 9 o 10 años aprendí sobre eso. ¿El compilador de Java convierte automáticamente una división por dos en una operación de cambio de bit, o debo realizar manualmente la operación de cambio de bit en el código?
http://stackoverflow.com/questions/1514949/quick-java-optimization-question Aborda la multiplicación por dos, pero las respuestas son aplicables. –
En general, si la operación A logra * exactamente * lo mismo que la operación B y lo hace más rápido, en algún lugar a lo largo de la línea B probablemente se optimice en A. El problema es cuando hay diferencias de casos fronterizos tales que uno no puede ser optimizado en el otro. En esos casos, debe: 1) evaluar si la diferencia en el rendimiento realmente importa (¡no hay optimización prematura!), 2) dar cuenta de los casos fronterizos (programe a su alrededor o demuestre que no serán golpeados, y 3) determine si existen ganancias y justifique la disminución en la legibilidad. –
Estoy profundamente sadened por el espectro de respuestas que obtuvo esta pregunta. Primero, dividir por dos y desplazar uno a la derecha no arrojará el mismo resultado para los números negativos en todos los casos. En segundo lugar, donde el resultado desplazado es suficiente, es aproximadamente 10 a 20 veces más rápido que la división. Tercero, el compilador no optimizará esto porque en cualquier caso no trivial no podrá probar que el operando desplazado no es negativo. Ah, y las respuestas de la pregunta de multiplicación no cubren la división, ya que la situación con optimizadores es diferente xD – Durandal