Этот вопрос был опубликован более года назад, но здесь идет речь ...
О вышеуказанных причинах
Пока Статья Дейкстры (ранее упоминалась втеперь удаленный ответ ) имеет смысл с математической точки зрения, он не так актуален , когда речь заходит о программировании.
Решение, принятоеСпецификация языка и разработчики компиляторов основаны на решении, принятом разработчиками компьютерных систем, начать отсчет с 0.
Возможная причина
Цитирование из Призыв к миру от Дэнни Коэна.
Для любого основания b первые b ^ N неотрицательных целых чисел представлены точно N цифрами (включая ведущие нули) только в том случае, если нумерация начинается с 0.
Это можно проверить довольно легко.В base-2 возьмите 2^3 = 8
Восьмое число:
- 8 (двоичное: 1000), если мы начнем считать 1
- 7 (двоичное: 111), если мы начнемсчет в 0
111
может быть представлен с использованием 3
битов, в то время как 1000
потребуется дополнительный бит (4 бита).
Почему эторелевантные
Адреса памяти компьютера имеют ячейки 2^N
, адресуемые N
битами.Теперь, если мы начнем считать с 1, для 2^N
ячеек потребуется N+1
адресных линий.Дополнительный бит необходим для доступа ровно к 1 адресу.(1000
в вышеуказанном случае.).Другой способ решить эту проблему - оставить последний адрес недоступным и использовать N
адресные строки.
Оба являются неоптимальными решениями по сравнению с начальным счетом в 0, при котором все адреса будут доступны, используя ровно N
адресные строки!
Заключение
Решение начать отсчет с 0
с тех пор проникло во все цифровые системы , включая программное обеспечение, работающее на них, потому что это упрощает перевод кода к тому, чтоОсновная система может интерпретировать.Если бы это было не так, была бы одна ненужная операция перевода между машиной и программистом для каждого доступа к массиву. Упрощает компиляцию.
Цитирование из статьи:
