Почему максимальное значение беззнакового n-битового целого 2 ^ n-1, а не 2 ^ n?
Максимальное значение n
-битового целого составляет 2 n -1. Почему у нас есть "минус 1"? Почему максимум не равен 2 n?
Ответы
Ответ 1
-1
заключается в том, что целые числа начинаются с 0, но наш подсчет начинается с 1.
Итак, 2^32-1
- максимальное значение для 32-разрядного целого числа без знака (32 двоичных разряда). 2^32
- количество возможных значений.
Чтобы упростить, посмотрите на десятичную. 10^2-1
- максимальное значение двузначного десятичного числа (99). Поскольку наш интуитивный подсчет людей начинается с 1, но целые числа основаны на 0, 10^2
- это число значений (100).
Ответ 2
2^32
в двоичном формате:
1 00000000 00000000 00000000 00000000
2^32 - 1
в двоичном формате:
11111111 11111111 11111111 11111111
Как вы можете видеть, 2^32
принимает бит 33
, тогда как 2^32 - 1
- максимальное значение целочисленного числа 32
.
Причиной, по-видимому, является ошибка "за один", так как младший бит представляет собой один, а не два. Таким образом, бит первый на самом деле 2^0
, бит второй - 2^1
и т.д....
Ответ 3
2 32 в двоичном формате - это один, за которым следуют 32 нуля, для всего 33 бит. Это не соответствует 32-битовому значению int.
Ответ 4
В большинстве языков программирования 0
также является числом.
Ответ 5
Числа от 0 до N не являются N. Они N + 1. Это не очевидно для большинства людей, и в результате у многих программ есть ошибки, потому что если эта причина.
Ответ 6
Это потому, что при вычислении числа начинаются с 0
. Итак, если у вас есть, например, 32 адресных строки (2 32 адресуемые байты), они будут находиться в диапазоне [0, 2^32)
.
Ответ 7
Если вы только начинаете программировать, я предлагаю вам взглянуть на эту статью wiki на подписанные представления числа
Как заявил Vicente, причина, по которой вы вычитаете 1, состоит в том, что 0
также является включенным числом. В качестве простого примера, с 3 битами, вы можете представить следующие неотрицательные целые числа
0 : 000
1 : 001
2 : 010
3 : 011
4 : 100
5 : 101
6 : 110
7 : 111
Все, что за этим стоит, требует более трех цифр. Следовательно, максимальное число, которое вы можете представить, равно 2 ^ 3-1 = 7. Таким образом, вы можете расширить его до любого n
и сказать, что вы можете выразить целые числа в диапазоне [0,2^n -1]
. Теперь вы можете прочитать эту статью и понять разные формы и представить отрицательные целые числа и т.д.
Ответ 8
Если я спрошу вас, какое самое большое значение вы можете вписать в 2-значное число, скажете ли вы, что 10 2 (100) или 10 2 -1 (99)? Очевидно, последнее. Из этого следует, что если я спрошу вас, что такое самое большое число n
-digit, это будет 10 n -1. Но почему есть "-1"? Проще говоря, потому что мы можем представить 0 в 2-значном числе также как 00 (но все просто записывают 0).
Позвольте заменить 10
на произвольную базу, b
. Из этого следует, что для данной базы b
наибольшее n
-значное число, которое вы можете представить, это b n -1. Используя 32-битное (n = 32
) base-2 (b = 2
) число, мы видим, что наибольшее значение мы можем представить 2 32 -1.
Другим способом думать об этом является использование меньших чисел. Скажем, у нас 1-битное число. Не могли бы вы сказать, что наибольшее значение, которое он может представлять, это 2 1 или 2 1 -1?
Ответ 9
В большинстве языков программирования integer является знаковым значением (см. два дополнения).
Например, в Java и .NET целочисленный самый левый байт зарезервирован для знака:
-
0
= > положительное или нулевое число
-
1
= > отрицательное число
Тогда максимальное значение для номера 32-bit
ограничено 2^31
. Добавив -1
, получим 2^31 - 1
.
Почему появляется -1
?
Посмотрите на более простой пример с неподписанным байтом (8 бит):
1 1 1 1 1 1 1 1
128 64 32 16 8 4 2 1 <-- the most right bit cannot represent 2
--- --------------------
128 + 127 = 255
Как отмечали другие ребята, самый правый бит может иметь максимальное значение 1
, а не 2
, из-за значений 0/1
.
Int32.MaxValue = 2147483647 (.NET)
Ответ 10
Так как 0 также представляется. Количество чисел, которые вы можете представить, действительно 2 ^ n с n битами, но максимальное число равно 2 ^ n-1, потому что вы должны начать подсчет в 0, то есть каждый бит равен 0.
Для 1 бит: 0, 1
Для 2 бит: 0, 1, 2, 3
Для 3 бит: 0, 1, 2, 3, 4, 5, 6, 7
И так далее.
Ответ 11
В области вычислений мы начинаем считать от 0.