Почему максимальное значение Int32 равно 0x7FFFFFFF?
Я видел в документах MSDN, что максимальное значение Int32
is 2,147,483,647
, шестнадцатеричный 0x7FFFFFFF
.
http://msdn.microsoft.com/en-us/library/system.int32.maxvalue.aspx
Я думаю, если это Int32
Он должен хранить 32-битное целое значение, которое, наконец, должно быть 4,294,967,295
и шестнадцатеричной 0xFFFFFFFF
.
мой вопрос, почему Int32
магазинах 31
бит целое значение?
6 ответов
Это потому, что это целое число со знаком. 32-разрядное целое число без знака дает ожидаемое значение.
проверьте эту страницу MSDN -http://msdn.microsoft.com/en-us/library/exx3b86w (v=против 80).aspx
для более глубокого объяснения того, почему это проверить ссылку в Jackson Popes ответ, связанный с представлением номера дополнения двух.
также некоторых более дальнеишее чтение.
Int32 и Int64 оба подписаны, поэтому они могут обрабатывать целочисленные значения от-capacity/2 до (capacity / 2)-1 (для нуля), поэтому максимальное значение не является ожидаемым. Но вы можете получить то, что хотите, используя unsigned int, чтобы иметь только положительные числа.
первый бит-это знак - int32 подписан, т. е. он может быть положительным / отрицательным (ну, я, вероятно, не должен говорить "Первый" БИТ!)
вы не рассматриваете отрицательные числа.
Int32
есть знак.
из MSDN:http://msdn.microsoft.com/en-us/library/system.int32.minvalue.aspx
The MinValue
is -2,147,483,648
, то есть шестнадцатеричный 0x80000000
.
в дополнении 2, подписанном n-разрядным типом, диапазон от -2n-1 в 2n-1-1, потому что с помощью n бит можно представить 2n различные значения, половина из которых используется для подписанных чисел из-за бита знака. Оставшиеся 2n-1 половина используется для неотрицательного числа. Поскольку один используется для 0, Есть только 2n-1-1 остальные значения для положительных чисел