Java-эквивалент unsigned long long?

В C++ мне нравилось иметь доступ к 64-битному целому числу без знака, через unsigned long long int или uint64_t. Теперь, в Java longs 64 бит, я знаю. Однако они подписаны.

есть ли беззнаковый длинный (длинный) доступный как примитив Java? Как его использовать?

10 ответов


Я так не думаю. Как только вы хотите пойти больше, чем подписанный длинный, я думаю BigInteger - это единственный (из коробки) путь.


начиная с Java 8, существует поддержка unsigned long (unsigned 64 bits). Способ его использования:

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

, чтобы распечатать его, вы не можете просто распечатать L1, но вы должны сначала:

String l1Str = Long.toUnsignedString(l1)

затем

System.out.println(l1Str);

нет, нет. Вам придется использовать примитивный long тип данных и решать вопросы signedness, или использовать класс, такой как BigInteger.


нет, нет. Дизайнеры Java официально заявляют, что им не нравились неподписанные ints. Используйте BigInteger вместо. См.этот вопрос для сведения.


Java 8 предоставляет набор беззнаковых длинных операций, который позволяет напрямую обрабатывать эти длинные переменные как беззнаковые длинные, вот некоторые часто используемые:

и сложения, вычитания и умножения одинаковы для подписанных и неподписанных лонгов.


в зависимости от операций, которые вы намерены выполнить, результат такой же, signed или unsigned. Однако, если вы не используете тривиальные операции, вы в конечном итоге используете BigInteger.


для unsigned long вы можете использовать UnsignedLong класс гуава библиотека:

Он поддерживает различные операции:

  • плюс
  • минус
  • времени
  • mod
  • dividedBy

то, что кажется отсутствующим в данный момент, - это операторы сдвига байтов. Если вам это нужно, вы можете использовать BigInteger из Java.


в Java нет беззнаковых типов. Как уже упоминалось, incure накладные расходы BigInteger или использовать JNI для доступа к родному коду.


орг.апаш.ось.типы пакет имеет

класс UnsignedLong.

для maven:

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

похоже на Java 8 добавлены некоторые методы долго относиться к старому добру [подписано] долго, как без знака. Похоже на обходной путь, но иногда может помочь.