Em C ++, eu gostava de ter acesso a um inteiro não assinado de 64 bits, via unsigned long long int
ou via uint64_t
. Agora, em Java, os longos são de 64 bits, eu sei. No entanto, eles estão assinados.
Existe um longo sem sinal (longo) disponível como um primitivo Java? Como eu uso isso?
Respostas:
Eu não acredito nisso. Se você quiser ir maior do que um contrato assinado, acho que BigInteger é o único caminho a seguir (pronto para usar).
fonte
A partir do Java 8, há suporte para unsigned long (não assinados de 64 bits). A maneira como você pode usá-lo é:
Para imprimi-lo, você não pode simplesmente imprimir l1, mas primeiro:
Então
fonte
Long ul1 = Long.parseUnsignedLong(objScannerInstance.next("\\d+"));
Não é exatamente elegante porque não tem uma verificação de intervalo, mas permitiria que você extraísse entradas numéricas longas que, de outra forma, poderiam exceder o intervalo de um longo sinalizado. (Aproveita o fato de queScanner::next(...)
também pode aceitar um objeto Padrão ou um padrão String.)Não, não há. Você terá que usar o
long
tipo de dados primitivo e lidar com problemas de assinatura ou usar uma classe comoBigInteger
.fonte
Não, não há. Os designers de Java estão registrados dizendo que não gostavam de ints não assinados. Em vez disso, use um BigInteger . Veja esta pergunta para detalhes.
fonte
Java 8 fornece um conjunto de operações longas sem sinal que permite que você trate diretamente essas variáveis Long como longas sem sinal. Aqui estão algumas das mais usadas:
E adições, subtrações e multiplicações são as mesmas para longos com e sem sinal.
fonte
Dependendo das operações que você pretende realizar, o resultado é praticamente o mesmo, com ou sem sinal. No entanto, a menos que esteja usando operações triviais, você acabará usando BigInteger.
fonte
Por tempo não assinado, você pode usar a classe UnsignedLong da biblioteca Guava :
Suporta várias operações:
O que parece faltar no momento são os operadores de deslocamento de bytes. Se precisar deles, você pode usar o BigInteger do Java.
fonte
Java não possui tipos não assinados. Como já mencionado, incure a sobrecarga do BigInteger ou use JNI para acessar o código nativo.
fonte
O pacote org.apache.axis.types tem um
Classe UnsignedLong.
para maven:
fonte
Parece que no Java 8 alguns métodos foram adicionados ao Long para tratar o antigo e bom [assinado], desde que não assinado. Parece uma solução alternativa, mas às vezes pode ajudar.
fonte