Почему максимальное значение 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 может быть меньше нуля).

http://en.wikipedia.org/wiki/Two%27s_complement


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 остальные значения для положительных чисел