Почему максимальное число в java 2 ^ 31 - 1, а не 2 ^ 31

Извините, если это действительно основной вопрос, но почему есть минус один для положительной стороны?

Это связано с тем, что нуль хранится или что-то еще? Я думал, что вычисление наивысшего возможного десятичного числа для двоичного кода будет состоять только в том, чтобы добавить полномочия в два раза, например, для 3-битного без знака это будет

1*2^0 + 1*2^1 + 1*2^2 = 7

Не следует ли применять одно и то же правило для целых чисел java? Благодаря

Ответ 1

Поскольку Java может поддерживать max signed int как 0x7fffffff, который равен 2 ^ 31-1.

2^31 = 0x80000000 is negative so Positive is 2^31-1

Сравнение двоичного уровня:

10000000000000000000000000000000  --> 2147483648 --> 2^31
01111111111111111111111111111111  --> 2147483647 --> 2^31 -1
^ Sign bit

Ответ 2

То же правило применяется... 7 is 2^3 - 1. И да, это из-за 0.:)

Напротив, негативы идут на -(2^31)

Итак, 2^31 отрицательные числа, один 0 и 2^31-1 строгие положительные значения, которые добавляют к...

2^31 + 1 + 2^31 - 1 = 2 * 2^31 = 2^32

Ответ 3

Это из-за удобства двух дополнений (что позволяет избежать сохранения двух нулей), а Java хранит числа, используя эту презентацию. Посмотрите здесь.

Ответ 4

Есть 2^31 неотрицательные числа от 0 до 2^31-1. Итак, да, zero также сохраняется как целое число. А также есть отрицательные числа 2^31 от -2^31 до -1.

Ответ 5

Он должен разделить 2 ^ 32.
1/2 отрицательны.
0 подсчитывается с положительным.
В математике 0 не является ни отрицательным, ни положительным.
Он совместим с .NET и MSSQL.

Если вы заметили, что набор, не содержащий негативов, называется unsigned. Он содержит 0 и не является правильным назвать его положительным.
Поскольку бинарный мир начинается с 0, он воспринимается как положительный. Ответ от Джека (+1) объясняется тем, почему.

Ответ 6

Если у вас есть n бит, у вас есть 2 ^ (n-1) отрицательные числа (поскольку верхний бит равен 1) и 2 ^ (n-1) неотрицательные числа. Так как нуль является неотрицательным числом, у вас есть до 2 ^ (n-1) -1 положительных чисел, которые также являются максимальными.

Примечание: положительное значение для отрицательного числа не существует, поэтому

-Integer.MIN_VALUE == Integer.MIN_VALUE

Ответ 7

Целочисленные числа Java представляют собой подписанные величины, поэтому один бит зарезервирован для знака, оставляя 31 бит для значения.