В Oracle "Примитивные типы данных" страница он упоминает, что Java 8 добавляет поддержку беззнаковых ints и longs:
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
и т.д. Для поддержки арифметических операций для unsignedlong
.
Однако я не нашел способа объявить unsigned long или integer. Следующий код, например, дает сообщение об ошибке компилятора "литеральный вне диапазона" (я, конечно, использую 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?