Há alguma forma de declarar uma int não assinada em Java?
Ou a questão também pode ser enquadrada como tal: O que é o equivalente em Java de não assinado?
Só para lhe dizer o contexto que eu estava olhando para a implementação do Java's do String.hashcode()
. Eu queria testar a possibilidade de colisão se o número inteiro fosse 32 int._ não assinado.
Java não tem um datatype para unsigned integers.
Você pode definir uma long
ao invés de uma int
se você precisar armazenar valores grandes.
Você também pode usar um número inteiro assinado como se não estivesse assinado. O benefício de two's complement representation é que a maioria das operações (tais como adição, subtração, multiplicação e deslocamento à esquerda) são idênticas em nível binário para números inteiros assinados e não assinados. Algumas operações (divisão, turno da direita, comparação e fundição), no entanto, são diferentes. A partir do Java SE 8, novos métodos na classe Integer permitem utilizar totalmente o tipo de dados `int' para executar aritmética não assinada:
Em Java SE 8 e posteriores, você pode usar o tipo de dados int para representar um inteiro não assinado de 32 bits, que tem um valor mínimo de 0 e um valor máximo de 2^32-1. Use a classe Integer para usar o tipo de dado int como um inteiro não assinado. Métodos estáticos como
compareUnsigned
,divideUnsigned
etc foram adicionados à classe Integer para suportar as operações aritméticas para inteiros não assinados.
Note que variáveis int
ainda são assinadas quando declaradas, mas aritmética não assinada agora é possível utilizando esses métodos na classe Integer
.