Неподписанный может быть больше, чем MAX_VALUE, так почему же этот sysout дает
-1, что отрицательно.
Integer
содержит 32-битное значение. Результатом parseUnsignedInt (32 однобитных, 2) является значение со всеми установленными битами. Что это «значит», в глазах смотрящего. Большая часть Java считает целочисленные значения подписанными. Например, средство форматирования, используемое println
, считает значение подписанным, и в результате получается -1
.
Все, что у вас есть в «Integer», это 32-битное значение. parseUnsignedInt () обрабатывает свой входной аргумент специально, но затем он должен сохранить результат в стандартном Integer. Нечего сказать, что биты должны быть «без знака». Если вы хотите трактовать значение как беззнаковое, вы не можете использовать что-либо, что обрабатывает его как подписанное, поскольку в Java действительно нет целочисленного типа без знака.
Разве подписанный int не предполагает, что первая 1 считается минусом, а
другие 31 1 как положительное значение? (так должно быть - MAX_VALUE)
См. Другой ответ для этой части.
Представление, которое, я думаю, вы ожидали, когда старший бит указывает знак, а остальные биты указывают (положительное) значение, называется представлением «знак и величина». Я не знаю ни одного текущего компьютера, который использует знак и величину для своих целых чисел (возможно, это произошло в самые ранние дни, в 1950-х или около того, когда люди начали разбираться с этим).