java - integers - biginteger base
¿Equivalente Java de unsigned long long? (10)
Al iniciar Java 8, existe soporte para long sin signo (64 bits sin signo). La forma en que puedes usarlo es:
Long l1 = Long.parseUnsignedLong("17916881237904312345");
Para imprimirlo, no puede simplemente imprimir l1, pero primero tiene que:
String l1Str = Long.toUnsignedString(l1)
Entonces
System.out.println(l1Str);
En C ++, disfruté de tener acceso a un entero sin signo de 64 bits, a través de unsigned long long int
, oa través de uint64_t
. Ahora, en Java longs son 64 bits, lo sé. Sin embargo, están firmados.
¿Hay un largo (largo) sin signo disponible como primitiva de Java? ¿Como lo uso?
El paquete org.apache.axis.types tiene un
UnsignedLong class.
para maven:
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
Java no tiene tipos sin firmar. Como ya se mencionó, aumente la sobrecarga de BigInteger o use JNI para acceder al código nativo.
No, no hay. Los diseñadores de Java han declarado que no les gustaban las notas sin firmar. Use un BigInteger lugar. Vea esta pregunta para más detalles.
No, no hay. Tendrá que usar el tipo de datos long
primitivos y tratar los problemas de firma, o usar una clase como BigInteger
.
Para unsigned long puede usar la clase UnsignedLong de la biblioteca de Guava :
Es compatible con varias operaciones:
- más
- menos
- veces
- mod
- dividido por
Lo que parece que falta en este momento son los operadores de cambio de byte. Si los necesita, puede usar BigInteger desde Java.
Parece que en Java 8 algunos métodos se agregan a Long para tratar el antiguo bueno [firmado] siempre que no esté firmado. Parece una solución alternativa, pero puede ayudar a veces.
Según las operaciones que pretenda realizar, el resultado es muy similar, firmado o sin firmar. Sin embargo, a menos que esté usando operaciones triviales terminará usando BigInteger.
Yo no lo creo. Una vez que quieras ir más grande que una longitud firmada, creo que BigInteger es el único (listo para usar) camino por recorrer.
Java 8 proporciona un conjunto de operaciones largas sin signo que le permite tratar directamente esas variables largas como largas sin firmar, aquí hay algunas de uso común:
- String toUnsignedString (long i)
- int compareUnsigned (long x, long y)
- dividendo divideUnsigned (dividendo largo, divisor largo)
- long remainderUnsigned (dividendo largo, divisor largo)
Y las adiciones, restas y multiplicaciones son las mismas para los largos firmados y sin firmar.