Явный эквивалент unsigned long long?

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

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

Ответ 1

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

Ответ 2

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

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

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

String l1Str = Long.toUnsignedString(l1)

Тогда

System.out.println(l1Str);

Ответ 3

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

Ответ 4

Нет, нет. Дизайнеры Java заявляют, что им не нравятся беззнаковые ints. Вместо этого используйте BigInteger. Подробнее см. этот вопрос.

Ответ 5

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

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

Ответ 6

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

Ответ 7

Для unsigned long вы можете использовать UnsignedLong класс из Библиотека Guava:

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

  • плюс
  • минус
  • раз
  • модник
  • dividedBy

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

Ответ 8

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

Ответ 9

В пакете org.apache.axis.types есть

Класс UnsignedLong.

для maven:

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

Ответ 10

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