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