На странице 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?