Estoy implementando una función hash Skein en Java, y tengo un problema con una parte donde algunas adiciones son módulo 2^64. Como yo sé, long in java tiene un valor máximo = 2^63-1. Entonces mi problema es cómo implementar esta operación de módulo. (Todas las operaciones en Skein están en palabras de 64 bits).Cómo mod2^64 de largo en Java?
Respuesta
long
en Java es de 64 bits, por lo que todas las operaciones son mod 2^64 ya. No tienes que hacer nada extra para que eso suceda.
¿El problema es que no sabe cómo manejar los valores firmados?
¿Esto es algo que quiere o es algo que está tratando de evitar?
Gracias, esto fue útil. Esto es exactamente lo que quiero Voy a estar operando solo en bits al final, así que no me importa un poco de señal. –
El único problema que tiene es para las operaciones donde el signo importa. p.ej. Long.toString (largo) imprimirá un signo. Sin embargo, muchas operaciones funcionan en los bits como se esperaría sin firmar o firmado. –
Al final de todas las operaciones, voy a ensamblar todas las palabras de 64 bits en Byte [] de 512 bits, y luego voy a interpretar todo como hexadecimal o cadena, todavía no lo sé. –
BigInteger
es una forma de hacerlo.
Además de la respuesta de Peter, quiero sugerir que eche un vistazo a la gran biblioteca Guava. Tiene una clase UnsignedLongs que ofrece varias funciones de utilidad para trabajar con longs tratándolas como unsigned. Esto podría ser útil para ti.
autor de' UnsignedLongs' aquí: la respuesta de Peter es en su mayoría precisa incluso para longs sin firmar. Específicamente, +, - y * son todos correctos incluso si trata valores largos como Además, puede que le resulte útil utilizar la clase contenedora 'UnsignedLong', que puede usar como' BigInteger' pero funciona mod 2^64. –
- 1. Conversión de largo a doble en Java
- 2. Java: convertir largo a Timestamp
- 3. ¿Cómo establecer un largo classpath de Java en Windows?
- 4. Java almacenando dos entradas en un largo
- 5. Especificación del número L (largo) de Java
- 6. ¿Cómo convierto un byte a un largo en Java?
- 7. ¿Cómo puedo convertir un largo a int en Java?
- 8. Conversión de largo en entero
- 9. ¿Cómo hacer coincidir un largo con expresiones regulares de Java?
- 10. sondeo largo netty nio framework java
- 11. ¿Cuál es el equivalente de largo sin signo en Java
- 12. ¿Hay algún reemplazo de doble largo en java?
- 13. hibernación mapa java largo de error de MySQL BIGINT
- 14. Cómo imprimir longif largo
- 15. largo largo vs int multiplicación
- 16. Escribir largo y doble no es atómico en Java?
- 17. Cómo comparar un valor largo es igual al valor largo
- 18. Clic largo en ListFragment
- 19. ¿Cómo registrar un valor largo largo con NSLog?
- 20. Error de número largo de Java demasiado grande?
- 21. Cómo dividir NSString largo en páginas
- 22. cómo presentar texto largo en iOS?
- 23. ¿Cómo calzo el título largo?
- 24. ¿Cómo puedo formatear un entero largo como una cadena sin separador en Java?
- 25. ¿Cómo puedo generar un hash largo de una cadena?
- 26. conversión de cadena a largo en pitón
- 27. Extensión de signo con largo largo sin signo
- 28. velocidad de iteración de int vs largo
- 29. en Scala, largo, int, etc.
- 30. Java: Cómo reemplazar los últimos 16 bits de un largo con un corto
Si no necesita que sea súper rápido, puede usar ['BigInteger'] (http://docs.oracle.com/javase/1.5.0/docs/api/java/math/BigInteger.html) – dasblinkenlight