Домашня » як » Чому комп'ютери підраховують від нуля?

    Чому комп'ютери підраховують від нуля?


    Підрахунок від нуля є дуже поширеною практикою на багатьох комп'ютерних мовах, але чому? Прочитайте, як ми досліджуємо це явище, і чому вона настільки поширена.

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

    Питання

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

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

    Які історичні підстави існують для цього, і які практичні переваги враховуючи від нуля, мають понад відлік від одного?

    Навіщо насправді? Як і поширена практика, безумовно, існують практичні причини її реалізації.

    Відповідь

    Співробітник SuperUser Matteo пропонує наступну інформацію:

    Підрахунок масивів від 0 спрощує обчислення адреси пам'яті кожного елемента.

    Якщо масив зберігається в заданій позиції в пам'яті (він називається адресою), позицію кожного елемента можна обчислити як

    елемент (n) = адреса + n * розмір_елемента 

    Якщо ви вважаєте перший елемент першим, обчислення стає

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

    Не велика різниця, але вона додає непотрібні віднімання для кожного доступу.

    Редагувати, щоб додати:

    • Використання індексу масиву як зміщення не є вимогою, а просто звичкою. Зміщення першого елемента може бути приховано системою і прийнято до уваги при виділенні і посилання на елемент.
    • Dijkstra опублікував статтю «Чому нумерація повинна починатися з нуля» (pdf), де він пояснює, чому починаючи з 0 - кращий вибір. Початок з нуля дозволяє краще представити діапазони.

    Якщо ви хочете глибше заглибитися у відповідь, папір Дейкстри є інформативним читанням.


    Маєте щось додати до пояснення? Звучить в коментарях. Хочете прочитати більше відповідей від інших технологічних користувачів Stack Exchange? Перегляньте повний потік обговорення тут.