En C ++, disfruté tener acceso a un entero sin signo de 64 bits, via unsigned long long int
o via uint64_t
. Ahora, en Java, los longs son de 64 bits, lo sé. Sin embargo, están firmados.
¿Hay un unsigned long (long) disponible como primitiva de Java? ¿Como lo uso?
Respuestas:
No lo creo. Una vez que quiera ir más grande que un largo firmado, creo que BigInteger es el único camino a seguir (listo para usar).
fuente
A partir de Java 8, hay soporte para unsigned long (64 bits sin firmar). La forma en que puedes usarlo es:
Para imprimirlo, no puede simplemente imprimir l1, sino que primero debe:
Luego
fuente
Long ul1 = Long.parseUnsignedLong(objScannerInstance.next("\\d+"));
No es exactamente elegante porque carece de una verificación de rango, pero le permitiría ingresar entradas numéricas largas que de otro modo excederían el rango de un largo con signo. (Aprovecha el hecho de queScanner::next(...)
también puede aceptar un objeto Pattern o un patrón String.)No, no lo hay. Tendrá que usar el
long
tipo de datos primitivo y lidiar con problemas de firma, o usar una clase comoBigInteger
.fuente
No, no lo hay. Los diseñadores de Java están registrados diciendo que no les gustaban las entradas sin firmar. En su lugar, use un BigInteger . Consulte esta pregunta para obtener más detalles.
fuente
Java 8 proporciona un conjunto de operaciones largas sin firmar que le permite tratar directamente esas variables Long como Long sin firmar, aquí hay algunas de uso común:
Y las sumas, restas y multiplicaciones son las mismas para largos con signo y sin signo.
fuente
Dependiendo de las operaciones que pretenda realizar, el resultado es prácticamente el mismo, firmado o no firmado. Sin embargo, a menos que esté usando operaciones triviales, terminará usando BigInteger.
fuente
Durante tiempo sin firmar, puede usar la clase UnsignedLong de la biblioteca de Guava :
Admite varias operaciones:
Lo que parece faltar en este momento son los operadores de desplazamiento de bytes. Si los necesita, puede usar BigInteger de Java.
fuente
Java no tiene tipos sin firmar. Como ya se mencionó, aumente la sobrecarga de BigInteger o use JNI para acceder al código nativo.
fuente
El paquete org.apache.axis.types tiene un
Clase UnsignedLong.
para maven:
fuente
Parece que en Java 8 se agregan algunos métodos a Long para tratar los viejos buenos [firmados] siempre que no estén firmados. Parece una solución alternativa, pero a veces puede ayudar.
fuente