Для получения неподписанного int вам необходимо использовать функции Integer.parseUnsignedInt()
или выполнить ручной расчет. Помните, что Java фактически не имеет целых чисел без знака, Java8 просто предоставляет возможность обрабатывать int как unsigned, чтобы обеспечить больший диапазон значений положительного числа.
Согласно Java 8 Doc for the Integer class,
Целое число без знака отображает значения, как правило, связанные с отрицательными чисел до положительных чисел больше, чем MAX_VALUE
Таким образом, преобразование между неподписанных INT и подписанную один что если число больше или равно нулю И меньше или равно Integer.MAX_VALUE
, оно остается неизменным. Если он больше, чем Integer.MAX_VALUE, но все еще находится в пределах диапазона без знака, то для его сохранения в файле int
вам нужно добавить к нему 2^31, что преобразует его в правильное значение из-за того, что переполнение добавления определяется как Операция. Переполнение и недополнение в дополнение к двоичным примитивам, таким как int
, просто заставляет счетчик сбросить и продолжить подсчет.
int min = Integer.MIN_VALUE; // -2147483648
int max = Integer.MAX_VALUE; // 2147483647
int overByOne = Integer.MAX_VALUE + 1; // -2147483648 : same as Integer.MIN_VALUE
int underByOne = Integer.MIN_VALUE - 1; // 2147483647 : same as Integer.MAX_VALUE
Они осуществляют только прошу вас, чтобы посмотреть на класс Integer и проверить различные (новые в Java8) методы для неподписанных операций. Java не имеет беззнаковых целочисленных примитивов, но значение int можно рассматривать как unsigned для целей некоторых новых методов в классе Integer.
Спасибо за ваш ответ. Я не уверен, что вопрос только с печатью. Если значение переполнения возвращается и будет использоваться в какой-либо другой операции, оно будет неверным. «Точные» операции, которые были введены в Java 8, [intValueExact] (http://docs.oracle.com/javase/8/docs/api/java/math/BigInteger.html#intValueExact--), вызывают исключения из таких случаях. –
Поскольку упражнение предусматривает использование 'int' для вычислений, нет никакого способа обойти это. Конечно, вы можете определить API своих вычислений безопасным способом, то есть вы можете использовать ['Integer.toUnsignedLong'] (http://docs.oracle.com/javase/8/docs/api/java/lang/ Integer.html # toUnsignedLong-int-), чтобы вернуть значение (которое вы рассчитали с помощью 'int') в форме, которая не может быть неверно истолкована. Конечно, это было бы так, если бы вы вернули результат как «String», используя ['toUnsignedString'] (http://docs.oracle.com/javase/8/docs/api/java/lang/Integer.html#toUnsignedString -int-) "расчет" '! =' "возвращаемый тип" – Holger
Я надеялся, что есть нечто большее, чем это. Если вы прочитаете вопрос, в нем говорится «использование значений« int »и неподписанных операций». Если кажется, что тривиальным является создание метода, который использует оператор '+' для добавления 2 int. Упражнение не добавляет никакой ценности, если мы не упускаем что-то. –