Pregunta

He escrito un intérprete, que me obliga a realizar la división de 32 bits de enteros sin signo. En Java, no puedo hacer esto como:

reg[a] = (int) ((reg[b] & 0xFFFFFFFFL) / (reg[c] & 0xFFFFFFFFL));

Pero me gustaría evitar la conversión de largo y volver a int. Java ya da la >>> operador de desplazamiento a la derecha sin signo para ese caso especial, así que tal vez hay una forma inteligente de hacer una división sin signo de la misma manera.

Tenga en cuenta que sumar y multiplicar buen trabajo, ya que de dos números cumplido sólo el trabajo.

¿Hay una mejor manera en Java para hacer esto?

¿Fue útil?

Solución

Bueno, si usted cambia de puesto hacia abajo en un bit, podría dividir los dos números resultantes, después desplazar hasta dos veces (debido a que el número resultante sería de 4 veces más pequeño). Pero eso sólo sería trabajar en números pares, ya que perdería el bit menos significativo.

Realmente no creo que le ahorraría cualquier momento para comprobar si esa condición. (O detectar números más pequeños entonces 2 31 )

Otros consejos

Siempre se puede utilizó BigInteger, que trabaja en números enteros de tamaño arbitrario, sino que sería mucho más caro que el fomento a long y echado hacia atrás como int. Es el propósito de mejorar el rendimiento (por lo tanto desea una solución "puro entero" para evitar el tiempo para lances) o para mejorar la legibilidad / comprensible el código es (en cuyo caso podría ser más ordenado BigInteger)?

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top