Pergunta

C ++, I se ter acesso a um número inteiro sem sinal de 64 bits, via unsigned long long int, ou através uint64_t. Agora, em longs Java são 64 bits, eu sei. No entanto, eles são assinados.

Existe um unsigned long (longo) disponível como um Java primitivo? Como posso usá-lo?

Foi útil?

Solução

Eu não acredito que sim. Uma vez que você quer ir maior do que um assinado longo, acho BigInteger é a única (fora da caixa) caminho a percorrer.

Outras dicas

Iniciando Java 8, não há suporte para sem assinatura longos (não assinados de 64 bits). A maneira como você pode usá-lo é:

Long l1 = Long.parseUnsignedLong("17916881237904312345");

Para imprimi-lo, você não pode simplesmente imprimir L1, mas primeiro você tem que:

String l1Str = Long.toUnsignedString(l1)

Em seguida

System.out.println(l1Str);

Não, não há. Você terá que usar o tipo de dados long primitivo e lidar com questões de assinatura, ou usar uma classe como BigInteger .

Não, não há. Os designers de Java estão no registro como dizendo que não gostava ints não assinados. Use um BigInteger . Consulte esta questão para mais detalhes.

Java 8 fornece um conjunto de longas operações não assinados que permite tratar diretamente essas variáveis ??desde que não assinado longa, here're alguns dos mais comumente utilizados:

e adições, subtrações e multiplicações são as mesmas para longs assinados e não assinados.

Dependendo das operações que pretende realizar, o resultado é o mesmo, com ou sem sinal. No entanto, a menos que você estiver usando operações triviais você vai acabar usando BigInteger.

Para unsigned long você pode usar unsignedLong classe de biblioteca Goiaba :

Ele suporta várias operações:

  • mais
  • menos
  • vezes
  • mod
  • dividedBy

A única coisa que parece faltar no momento são operadores de deslocamento de byte. Se você precisa aqueles que você pode usar BigInteger de Java.

Java não possui tipos não assinados. Como já mencionado, incure a sobrecarga de BigInteger ou usar JNI para código nativo de acesso.

O pacote org.apache.axis.types tem um

classe unsignedLong.

para maven:

<dependency>
    <groupId>org.apache.axis</groupId>
    <artifactId>axis</artifactId>
    <version>1.4</version>
</dependency>

Parece que em Java 8 alguns métodos são adicionados para longa para tratar o bom e velho [assinado] enquanto não assinado. Parece ser uma solução, mas pode ajudar às vezes.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top