2010-03-26 15 views
5

¿Hay alguna razón para pensar que los operadores de desplazamiento de bit a la derecha >> (con signo) y >>> (sin signo) en Java funcionarían de manera diferente? No puedo detectar ninguna diferencia en mi máquina.¿Alguna vez el rendimiento es diferente entre Java >> y >>> operadores de desplazamiento a la derecha?

Esto es puramente una cuestión académica; nunca será el cuello de botella, estoy seguro. Lo sé: es mejor escribir lo que quieres decir antes que nada; use >> para la división por 2, por ejemplo.

Supongo que se trata de qué arquitecturas tienen qué operaciones implementadas como una instrucción.

+0

Creo que ambos se convertirán a instrucciones originales de la CPU (lógica/aritmética a la derecha) que con el tiempo toma ciclos similares. – kennytm

+4

No, use '/ 2' para la división por 2. –

+1

+1 para hacer que busque el operador >>>. Y no subestimes la optimización que hace el compilador. A menudo, la optimización en este nivel puede empeorar las cosas. – Thirler

Respuesta

3

No. Su compilador los traducirá a bytecode y la JVM interpretará el bytecode para su arquitectura. Creo que es seguro asumir que su arquitectura tiene un conjunto de instrucciones que incluye ambas operaciones en pocos ciclos de reloj.

De todos modos, existe una diferencia en el comportamiento de estos operadores, por lo que no es como si solo pudiera intercambiarlos.

+0

@Tim Bender: +1 ... En el mundo x86, * ">> 1" * ya que el P4 fue solo un ciclo y desde la arquitectura P6 * ">> any" * es solo un ciclo AFAIK. – SyntaxT3rr0r

+0

Creo que esa era mi pregunta: ¿las arquitecturas comunes implementan ambas como una instrucción? Y sí, como dije, esto solo se aplica en casos donde el comportamiento es idéntico (números enteros no negativos). –

Cuestiones relacionadas