Java эквивалент unsigned long long?
В C++ мне нравилось иметь доступ к 64-битному целому числу без знака, через unsigned long long int
или uint64_t
. Теперь, в Java longs-это 64 бита, я знаю. Однако они подписаны.
есть ли беззнаковый длинный (длинный) доступный как примитив Java? Как мне его использовать?
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 предоставляет набор беззнаковых длинных операций, который позволяет непосредственно обрабатывать эти длинные переменные как беззнаковые длинные, вот некоторые из них обычно используются:
- строка toUnsignedString(Я)
- int compareUnsigned(длинный x, длинный y)
- долго divideUnsigned(длинный дивиденд, длинный делитель)
- долго remainderUnsigned(длинные дивиденды, долго делитель)
и сложения, вычитания и умножения одинаковы для подписанных и беззнаковых лонгов.
в зависимости от операций, которые вы намерены выполнить, результат такой же, 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 добавлены некоторые методы долго относиться к старому добру [подписано] долго, как без подписи. Похоже на обходной путь, но иногда может помочь.