Счет с нуля - очень распространенная практика во многих компьютерных языках, но почему? Читайте дальше, пока мы исследуем это явление и почему оно так широко распространено.
Сегодняшняя сессия вопросов и ответов проходит благодаря SuperUser - подразделению Stack Exchange, группы веб-сайтов вопросов и ответов, управляемой сообществом.
Вопрос
Читателю SuperUser DragonLord интересно, почему большинство операционных систем и языков программирования считают с нуля. Он пишет:
Компьютеры традиционно считают числовые значения, начиная с нуля. Например, массивы в языках программирования на основе C начинаются с нулевого индекса.
Какие исторические причины существуют для этого и какие практические преимущества дает счет с нуля перед счетом с единицы?
Действительно, почему? Какой бы распространенной ни была практика, безусловно, есть практические причины для ее внедрения.
Ответ
Участник SuperUser Маттео предлагает следующие идеи:
Подсчет массивов от 0 упрощает вычисление адреса памяти каждого элемента.
Если массив хранится в заданной позиции в памяти (она называется адресом), позиция каждого элемента может быть вычислена как
элемент (n) = адрес + n * размер_элементаЕсли вы считаете первый элемент первым, вычисление становится
элемент (n) = адрес + (n-1) * размер_элементаНе большая разница, но добавляет ненужное вычитание для каждого доступа.
Отредактировано для добавления:
- Использование индекса массива в качестве смещения - это не требование, а просто привычка. Смещение первого элемента может быть скрыто системой и учтено при размещении и ссылке на элемент.
- Dijkstra опубликовал статью «Почему нумерация должна начинаться с нуля» ( pdf ), где он объясняет, почему лучше начинать с 0. Начало с нуля позволяет лучше представить диапазоны.
Если вы хотите глубже понять ответ, статья Дейкстры - это информативное чтение.
Есть что добавить к объяснению? Отключи в комментариях. Хотите узнать больше ответов от других технически подкованных пользователей Stack Exchange? Ознакомьтесь с полной веткой обсуждения здесь .