Домашняя » как » Почему компьютеры отсчитывают от нуля?

    Почему компьютеры отсчитывают от нуля?


    Подсчет с нуля - очень распространенная практика на многих компьютерных языках, но почему? Читайте дальше, когда мы исследуем это явление и почему оно так широко распространено..

    Сегодняшняя сессия вопросов и ответов пришла к нам благодаря SuperUser - подразделению Stack Exchange, группе веб-сайтов вопросов и ответов, управляемой сообществом..

    Вопрос

    Читатель SuperUser DragonLord интересуется, почему большинство операционных систем и языков программирования считаются с нуля. Он пишет:

    Компьютеры традиционно подсчитывают числовые значения, начиная с нуля. Например, массивы в языках программирования на основе C начинаются с нуля индекса.

    Какие исторические причины для этого существуют, и какие практические преимущества имеет счет от нуля по сравнению с счетом от одного?

    Почему так? Как бы ни была широко распространена практика, безусловно, есть практические причины для ее реализации..

    Ответ

    Участник SuperUser Matteo предлагает следующие идеи:

    Подсчет массивов от 0 упрощает вычисление адреса памяти каждого элемента.

    Если массив хранится в данной позиции в памяти (это называется адресом), позиция каждого элемента может быть вычислена как

    элемент (n) = адрес + n * size_of_the_element 

    Если вы считаете первый элемент первым, вычисление становится

    элемент (n) = адрес + (n-1) * size_of_the_element 

    Не большая разница, но добавляет ненужное вычитание для каждого доступа.

    Отредактировано, чтобы добавить:

    • Использование индекса массива в качестве смещения - это не требование, а просто привычка. Смещение первого элемента может быть скрыто системой и учтено при выделении и ссылке на элемент.
    • Дейкстра опубликовал статью «Почему нумерация должна начинаться с нуля» (pdf), где он объясняет, почему начинать с 0 - лучший выбор. Начиная с нуля, можно лучше представить диапазоны.

    Если вы хотите углубиться в ответ, статья Дейкстры - это информативное чтение.


    Есть что добавить к объяснению? Звук выключен в комментариях. Хотите узнать больше ответов от других технически подкованных пользователей Stack Exchange? Ознакомьтесь с полным обсуждением здесь.