saber por otro numeros numero entera divisores divisor divisibles divisible decimales como algoritmo java performance bit-manipulation division bit-shift

otro - ¿Debo cambiar de bit para dividir por 2 en Java?



divisores de un numero en java (4)

Posibles duplicados:
¿Cambiar bits es más rápido que multiplicar y dividir en Java? .¿RED?
Pregunta rápida de optimización de Java

Hace muchos años, en la universidad, aprendí que el cambio de bits de una a la otra logra lo mismo que dividir por dos, pero generalmente es mucho más rápido. No estoy seguro de cómo ha ido Java a este respecto desde los 9-10 años atrás, aprendí sobre eso. ¿El compilador de Java convierte automáticamente una división por dos en una operación de cambio de bits, o debo realizar manualmente la operación de cambio de bits en el código?


A menos que esté trabajando en una tienda y en una base de código donde el cambio de bits sea común en ese momento, en mi humilde opinión, corre el riesgo de ofuscación. Sí, las expresiones pueden ser lógicamente equivalentes pero:

  • Un n00b podría confundirse con la sintaxis alternativa
  • Un viejo que no ha tenido que cambiar nada desde la universidad, como yo, podría confundirse
  • Si cambias un poco y sientes la necesidad de comentar lo que acabas de hacer, entonces definitivamente estás fuera. La división simple es autodocumentada y sería clara para cualquier persona que esté familiarizada con las matemáticas elementales
  • No vas a ser más astuto que un compilador para la optimización en algo tan simple, así que no te molestes en intentarlo
  • Como buena práctica de codificación, es mejor hacer su código simple / vainilla en lugar de inteligente (er)

Todo esto es relativo y, nuevamente, realmente depende de los estándares de su tienda. Si a sus colegas les encanta cambiar de bit, entonces, por supuesto, siga adelante y cambie de bit.


La rutina de división para tu CPU manejará esto. No hay necesidad de que lo hagas.

Esto se conoce como una optimización prematura .


Los compiladores modernos son lo suficientemente inteligentes como para generar el código más rápido para las divisiones en dos. Harán un cambio si es más rápido. Si lo que quiere lograr es una división por 2, usar una división hará que su código sea más claro. Y evitarás problemas cuando el número a dividir sea negativo.


Sí, esto es lo primero que hará cualquier persona que intente hacer optimizaciones del compilador (y lo ha hecho durante al menos 5 décadas), lo más seguro es que lo haga el compilador JIT de Java, y probablemente le resulte difícil encontrarlo. Cualquier compilador que no lo haga.

E incluso si no lo hicieran, seguiría siendo una microoptimización prematura que debería evitarse en favor de que el código sea más claro.