W Oracle „prymitywnych typów danych” strony , to mówi, że Java 8 dodaje wsparcie dla unsigned int i wyroby długie:
int
: Domyślnieint
typ danych jest 32-bitową uzupełnienie dwójkowe liczbę całkowitą, która ma wartość minimalną -2 31 i wartość maksymalnej ilości 2 31 -1. W Java SE 8, a następnie, można użyćint
typu danych reprezentuje nieoznaczoną 32-bitową liczbę całkowitą, która ma wartość co najmniej 0 i wartości maksimum 2 32 -1. UżyjInteger
klasy, aby użyćint
typu danych jako liczby całkowitej bez znaku. Aby uzyskać więcej informacji, zobacz sekcję Klasy liczbowe. Do klasy dodano metody statyczne, takie jak itp.compareUnsigned
, Aby obsługiwać operacje arytmetyczne na liczbach całkowitych bez znaku.divideUnsigned
Integer
long
: Typlong
danych to 64-bitowa liczba całkowita z uzupełnieniem do dwóch. Podpisanylong
ma wartość minimalną -2 63 i wartość maksymalnej ilości 2 63 -1. W Java SE 8, a następnie, można użyćlong
typu danych reprezentuje nieoznaczoną 64-bitowylong
, który ma minimalną wartość 0, a wartość maksymalna z 2 64 -1. Użyj tego typu danych, gdy potrzebujesz zakresu wartości szerszego niż te podane przez int.Long
Klasa zawiera również metody podobacompareUnsigned
,divideUnsigned
etc w celu wsparcia operacji arytmetycznych na niepodpisanelong
.
Jednak nie znajduję sposobu, aby zadeklarować długość bez znaku lub liczbę całkowitą. Na przykład poniższy kod wyświetla komunikat o błędzie kompilatora „literał jest poza zakresem” (używam oczywiście Java 8), kiedy powinien znajdować się w zakresie (przypisana wartość to dokładnie 2 64 −1) :
public class Foo {
static long values = 18446744073709551615L;
public static void main(String[] args){
System.out.println(values);
}
}
Czy jest więc sposób na zadeklarowanie unsigned int lub long?