Почему максимальное значение беззнакового 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.