Почему Int32.MaxValue = 2147483648? [Дубликат]

1

Мне интересно, почему максимально возможное значение Int32 в.NET равно 2147483647, но не 2147483648. Поскольку 2³¹ = 2147483648.

спасибо

  • 5
    По той же причине, по которой sbyte переходит от -128 до 127. Подумайте над этим примером на некоторое время, потому что легче рассмотреть небольшие числа. Подумайте, сколько разных чисел представлено в диапазоне [-128, 127] ...
  • 1
    2^31 = 10000000000000000000000000000000 который нельзя использовать в качестве начального бита для знака. Так на один меньше ( 11111111111111111111111111111111111 ).
Показать ещё 2 комментария
Теги:

4 ответа

7

Int32 хранится в 32 битах, а не 31 бит, а половина его диапазона принимается отрицательными числами. Из оставшегося диапазона вы теряете одно значение до нуля, оставляя 2147483647 наивысшим положительным числом.

Диапазон для Int32 - -2147483648 до 2147483647.

  • 0
    Я понимаю, что int хранится в 32 битах, а самый левый бит зарезервирован для знака. То, что я не понимаю, это «потерять одно значение до нуля» .. как это? потому что все нули сами по себе равны 0 000 ... 0000 = 0 000 ... 0001 = 1 000 ... 0010 = 2 ... 011 ... 1110 = 1073741824 011 ... 1111 = 2147483648
  • 0
    Вы действительно должны потратить некоторое время на изучение Википедии о представлении двоичных и целых чисел со знаком. Представление, обычно используемое для целых чисел со знаком, называется дополнением к двум. Быстро, однако, для 8-битного числа вы можете иметь 2^8 или 256 значений. Мы помещаем ровно половину из них ( 2^7 или 128), на отрицательную сторону нуля, ноль берет один, а другую половину мы переводим с нуля. Поскольку ноль занимает единицу, у нас остается 2^7-1 положительных чисел или 127. Это можно расширить до 32-разрядных, где мы получим 2^31-1 положительных чисел. Другие числовые представления также могут иметь -0 и +0.
3

Фактические данные Int32 хранятся в 31 бит, так как обычный Int32 также должен содержать отрицательные числа, 1 бит используется как знаковый бит, а 31 бит, которые остаются, используются в качестве данных. Однако, если вы используете неподписанный Int32, тогда у вас будет полное 32 бита данных.

3

Он также включает нуль 0 в положительном диапазоне. Следовательно, диапазон от 0 до 2147483647 и так как нуль рассматривается в положительной стороне, следовательно, в сторону отрицательной стороны от -1 до -2147483648.

Таким образом, общая положительная и отрицательная стороны принимают равное количество значений.

1

Это означает, что int может иметь максимум 2147483648 положительных значений, начиная с 0 до 2147483647, int.Min -2, 147 483 648, поскольку он не включает 0

  • 0
    Причина для голосования?
  • 1
    Не уверен, но ответил

Ещё вопросы

Сообщество Overcoder
Наверх
Меню