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 предоставляет набор беззнаковых длинных операций, который позволяет напрямую обрабатывать эти длинные переменные как беззнаковые длинные, вот некоторые часто используемые:
- строка toUnsignedString(длинный i)
- int compareUnsigned(длинный x, длинный y)
- долго divideUnsigned(длинный дивиденд, длинный делитель)
- долго remainderUnsigned(длинные дивиденды, долго divisor)
и сложения, вычитания и умножения одинаковы для подписанных и неподписанных лонгов.
в зависимости от операций, которые вы намерены выполнить, результат такой же, 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 добавлены некоторые методы долго относиться к старому добру [подписано] долго, как без знака. Похоже на обходной путь, но иногда может помочь.