Подтвердить что ты не робот

Почему Int32 максимальное значение 0x7FFFFFFF?

Я видел в документах MSDN, что максимальное значение Int32 составляет 2,147,483,647, шестнадцатеричный 0x7FFFFFFF.

Я думаю, если это Int32 он должен хранить 32-битные целочисленные значения, которые в конечном итоге должны быть 4,294,967,295 и шестнадцатеричное 0xFFFFFFFF.

У меня вопрос, почему Int32 хранит 31-битные целочисленные значения?

4b9b3361

Ответ 1

Это потому, что это целое число со знаком. Беззнаковое 32-битное целое число дает вам ожидаемое значение.

Проверьте эту страницу MSDN - http://msdn.microsoft.com/en-us/library/exx3b86w(v=vs.80).aspx

Для более подробного объяснения причин, почему это проверяет связь в ответ Джексон Папа, связанная с представлением числа двух дополнений.

Также некоторое чтение.

Ответ 3

Int32 и Int64 оба подписаны, чтобы они могли обрабатывать целочисленные значения из -capacity/2 в (capacity/2) -1 (для нуля), поэтому максимальное значение не та, которую вы ожидали. Но вы можете получить то, что хотите, используя unsigned int, чтобы иметь только положительные числа.

Ответ 5

Первый бит - это знак - int32 подписан, то есть он может быть положительным/отрицательным (ну, наверное, я не должен говорить "первый" бит!)

Ответ 6

В 2-значном n-разрядном типе, диапазон составляет от -2 n-1 до 2 n-1 -1, потому что с n битами, которые вы можете представлять 2 n разные значения, половина из которых используется для подписанных чисел из-за знакового бита. Остальная 2 n-1 половина используется для неотрицательного числа. Поскольку один используется для 0, осталось только 2 n-1 -1 оставшихся значений для положительных чисел