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


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

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

10 98

10 ответов:

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

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

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

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

String l1Str = Long.toUnsignedString(l1)

затем

System.out.println(l1Str);

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

нет, нет. Создателей Java идут на рекорд, как говорят, они не любят неподписанные ИНЦ. Используйте 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 добавлены некоторые методы долго относиться к старому добру [подписано] долго, как без подписи. Похоже на обходной путь, но иногда может помочь.