Ответ 1
Я так не верю. Как только вы захотите пойти больше, чем подписанный долго, я думаю, BigInteger является единственным (из коробки) способом.
В С++ мне понравился доступ к 64-битовому беззнаковому целому, через unsigned long long int
или через uint64_t
. Теперь, в Java longs 64 бит, я знаю. Однако они подписаны.
Существует ли unsigned long (long), доступный как примитив Java? Как его использовать?
Я так не верю. Как только вы захотите пойти больше, чем подписанный долго, я думаю, BigInteger является единственным (из коробки) способом.
Запуск Java 8, поддержка unsigned long (без знака 64 бит). Способ его использования:
Long l1 = Long.parseUnsignedLong("17916881237904312345");
Чтобы распечатать его, вы не можете просто распечатать l1, но сначала вы должны:
String l1Str = Long.toUnsignedString(l1)
Тогда
System.out.println(l1Str);
Нет, нет. Вам нужно будет использовать примитивный тип данных long
и решать проблемы с подписью или использовать класс, например BigInteger
.
Нет, нет. Дизайнеры Java заявляют, что им не нравятся беззнаковые ints. Вместо этого используйте BigInteger. Подробнее см. этот вопрос.
Java 8 предоставляет набор беззнаковых длинных операций, которые позволяют напрямую обрабатывать эти длинные переменные как unsigned Long, вот некоторые из них обычно используются из них:
И дополнения, вычитания и умножения одинаковы для длинных и без знака.
В зависимости от операций, которые вы собираетесь выполнять, результат будет таким же, подписанным или неподписанным. Однако, если вы не используете тривиальные операции, вы в конечном итоге используете BigInteger.
Для unsigned long вы можете использовать UnsignedLong класс из Библиотека Guava:
Он поддерживает различные операции:
То, что на данный момент кажется отсутствующим, - это операторы сдвига байтов. Если вам нужны те, которые вы можете использовать BigInteger с Java.
В Java нет неподписанных типов. Как уже упоминалось, накладные расходы BigInteger или использование JNI для доступа к собственному коду.
В пакете org.apache.axis.types есть
Класс UnsignedLong.
для maven:
<dependency>
<groupId>org.apache.axis</groupId>
<artifactId>axis</artifactId>
<version>1.4</version>
</dependency>
Кажется, что в Java 8 добавлены некоторые методы до Long, чтобы обрабатывать старые добрые [подписанные] длинные как unsigned. Это похоже на обходной путь, но иногда может помочь.