На странице Oracle «Примитивные типы данных» упоминается, что в Java 8 добавлена поддержка беззнаковых целых и длинных чисел:
int
: По умолчаниюint
тип данных представляет собой 32-битное целое число со знаком в дополнительном коде, минимальное значение которого равно −2 31, а максимальное - 2 31 −1. В Java SE 8 и более поздних версиях вы можете использоватьint
тип данных для представления беззнакового 32-битного целого числа, которое имеет минимальное значение 0 и максимальное значение 2 32 -1. ИспользуйтеInteger
класс, чтобы использоватьint
тип данных как целое число без знака. См. Раздел «Числовые классы» для получения дополнительной информации. В класс были добавлены статические методы, такие какcompareUnsigned
иdivideUnsigned
т.д.,Integer
для поддержки арифметических операций с целыми числами без знака.
long
: Типlong
данных - 64-битное целое число с дополнением до двух. Знакlong
имеет минимальное значение -2 63 и максимальное значение 2 63 -1. В Java SE 8 и более поздних версиях вы можете использоватьlong
тип данных для представления беззнакового 64-битного массиваlong
, который имеет минимальное значение 0 и максимальное значение 2 64 -1. Используйте этот тип данных, когда вам нужен более широкий диапазон значений, чем тот, который предоставляется int.Long
Класс также содержит методы , такие какcompareUnsigned
, иdivideUnsigned
т.д. , чтобы поддерживать арифметические операции для беззнаковогоlong
.
Однако я не могу объявить беззнаковое длинное или целое число. Следующий код, например, выдает сообщение об ошибке компилятора «литерал вне допустимого диапазона» (я, конечно, использую Java 8), когда он должен быть в диапазоне (присвоенное значение равно 2 64 -1). :
public class Foo {
static long values = 18446744073709551615L;
public static void main(String[] args){
System.out.println(values);
}
}
Итак, есть ли способ объявить unsigned int или long?