Вопрос

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

Есть ли беззнаковый длинный (длинный) доступный в качестве примитива Java?Как мне его использовать?

Это было полезно?

Решение

Я так не думаю.Я думаю, что если вы захотите выйти за пределы подписанной длинной позиции, БигИнтегер это единственный (из коробки) путь.

Другие советы

Начиная с Java 8, появилась поддержка unsigned long (64 бита без знака).Вы можете использовать его следующим образом:

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

Чтобы его распечатать, нельзя просто распечатать l1, а нужно сначала:

String l1Str = Long.toUnsignedString(l1)

Затем

System.out.println(l1Str);

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

Нет, нет.Разработчики Java официально заявили, что им не нравятся беззнаковые целые числа.Использовать БигИнтегер вместо.Видеть этот вопрос для получения подробной информации.

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

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

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

Для unsigned long вы можете использовать Беззнаковыйдлинный класс из Библиотека Гуавы:

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

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

Чего на данный момент не хватает, так это операторов сдвига байтов.Если они вам нужны, вы можете использовать BigInteger из Java.

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

Пакет org.apache.axis.types имеет

Класс UnsignedLong.

для Мавена:

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top