W C ++ lubiłem mieć dostęp do 64-bitowej liczby całkowitej bez znaku, via unsigned long long int
lub via uint64_t
. Wiem, że w Javie długie są 64 bity. Jednak są podpisane.
Czy jest dostępny długi (długi) bez znaku jako prymityw Java? Jak tego używam?
java
unsigned
primitive
unsigned-long-long-int
jedenaście81
źródło
źródło
Odpowiedzi:
Nie wierzę w to. Jeśli chcesz osiągnąć więcej niż długi ze znakiem , myślę, że BigInteger jest jedynym (po wyjęciu z pudełka) sposobem.
źródło
Począwszy od Javy 8, dostępna jest obsługa długości bez znaku (64 bity bez znaku). Sposób, w jaki możesz go używać, to:
Aby go wydrukować, nie możesz po prostu wydrukować l1, ale musisz najpierw:
Następnie
źródło
Long ul1 = Long.parseUnsignedLong(objScannerInstance.next("\\d+"));
Niezupełnie eleganckie, ponieważ nie ma sprawdzania zakresu, ale pozwoliłoby ci wciągnąć długie wejścia numeryczne, które w przeciwnym razie mogłyby przekroczyć zakres ze znakiem długości. (Wykorzystuje fakt, żeScanner::next(...)
może również akceptować obiekt Pattern lub wzór String.)Nie, nie ma. Będziesz musiał użyć pierwotnego
long
typu danych i zająć się problemami z podpisami lub użyć klasy, takiej jakBigInteger
.źródło
Nie, nie ma. Projektanci Javy twierdzą, że nie lubią niepodpisanych intów. Zamiast tego użyj BigInteger . Zobacz to pytanie, aby uzyskać szczegółowe informacje.
źródło
Java 8 udostępnia zestaw długich operacji bez znaku, które pozwalają bezpośrednio traktować te zmienne typu Long jako długie bez znaku. Oto kilka najczęściej używanych:
A dodawanie, odejmowanie i mnożenie jest takie samo dla longów ze znakiem i bez znaku.
źródło
W zależności od operacji, które zamierzasz wykonać, wynik jest bardzo podobny, podpisany lub niepodpisany. Jednak jeśli nie używasz trywialnych operacji, skończysz na BigInteger.
źródło
Przez długi czas bez znaku możesz użyć klasy UnsignedLong z biblioteki Guava :
Obsługuje różne operacje:
W tej chwili wydaje się, że brakuje operatorów przesuwających bajty. Jeśli ich potrzebujesz, możesz użyć BigInteger w Javie.
źródło
Java nie ma typów bez znaku. Jak już wspomniano, zwiększ obciążenie BigInteger lub użyj JNI, aby uzyskać dostęp do kodu natywnego.
źródło
Pakiet org.apache.axis.types ma rozszerzenie
Klasa UnsignedLong.
dla maven:
źródło
Wygląda na to, że w Javie 8 niektóre metody są dodawane do Long, aby traktować stare dobre [podpisane] jako niepodpisane. Wydaje się, że można obejść ten problem, ale czasami może pomóc.
źródło