В C ++ мне нравилось иметь доступ к 64-битному целому числу без знака, через unsigned long long int
или через uint64_t
. Я знаю, что в Java длинные строки - это 64 бита. Однако они подписаны.
Доступен ли беззнаковый длинный (длинный) как примитив Java? Как мне его использовать?
java
unsigned
primitive
unsigned-long-long-int
одиннадцать81
источник
источник
Ответы:
Я так не верю. Если вы захотите выйти за рамки подписанного лонг, я думаю, что BigInteger - единственный (нестандартный) способ пойти.
источник
Начиная с Java 8, есть поддержка unsigned long (беззнаковые 64 бита). Вы можете использовать это следующим образом:
Чтобы распечатать его, вы не можете просто распечатать l1, но вам нужно сначала:
затем
источник
Long ul1 = Long.parseUnsignedLong(objScannerInstance.next("\\d+"));
не совсем элегантный, потому что в нем отсутствует проверка диапазона, но он позволит вам вводить длинные числовые входы, которые в противном случае могли бы выйти за пределы диапазона длинного числа со знаком. (Использует тот факт, чтоScanner::next(...)
также может принимать либо объект Pattern, либо шаблон String.)Нет, нет. Вам придется использовать примитивный
long
тип данных и решать проблемы подписи или использовать такой класс, какBigInteger
.источник
Нет, нет. Разработчики Java официально заявляют, что им не нравятся целые числа без знака. Вместо этого используйте BigInteger . См. Этот вопрос для подробностей.
источник
Java 8 предоставляет набор длинных беззнаковых операций, которые позволяют вам напрямую обрабатывать эти длинные переменные как беззнаковые длинные, вот некоторые из наиболее часто используемых:
И сложение, вычитание и умножение одинаковы для длинных чисел со знаком и без знака.
источник
В зависимости от операций, которые вы собираетесь выполнить, результат во многом будет одинаковым, со знаком или без знака. Однако, если вы не используете тривиальные операции, вы в конечном итоге будете использовать BigInteger.
источник
Для unsigned long вы можете использовать класс UnsignedLong из библиотеки Guava :
Он поддерживает различные операции:
На данный момент кажется, что не хватает операторов байтового сдвига. Если они вам нужны, вы можете использовать BigInteger из Java.
источник
В Java нет беззнаковых типов. Как уже упоминалось, используйте накладные расходы BigInteger или используйте JNI для доступа к машинному коду.
источник
В пакете org.apache.axis.types есть
UnsignedLong класс.
для maven:
источник
Похоже, что в Java 8 в Long добавлены некоторые методы для обработки старого доброго [подписанного] долго без знака. Похоже на обходной путь, но иногда может помочь.
источник