Necesito encontrar la orden más alta 1 en algunos largos, ints y cortos en Java. Por ejemplo, si tuviera un carácter que se parecía al 00110101
, necesito un método que arroje 2 (índice del orden más alto 1).Encontrar el orden más alto 1 en una primitiva Java
Ahora, sé que usted puede hacer esto utilizando un bucle como:
for(int i=0; i<8; i++)
if((x & 1<<i) != 0) return i;
return -1;
pero esto es mucho más lento que lo que yo quiero hacer. Sé que las CPU modernas tienen instrucciones que hacen esto en un chip, así que quiero saber cómo puedo hacer una llamada a eso en lugar de tener un bucle explícito.
EDITAR: puntos de bonificación si puede simplemente devolver los índices de todos los que están en la primitiva.
Gracias.
¿Está ejecutando en una máquina endian grande? – int3
Tenía la impresión de que Java manejaba endianess a su manera en la JVM, pero suponiendo que no lo haga, usaré un Intel C2D, tan poco endian. – twolfe18
Ejecutando tu código, obtengo 0, no 2. – Buhb